package gy4simpledb.dbclasses;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class MyServer extends DBServer {

    private List<Hallgato> hallgatok;
    private String[] hallgatokColumnNames = {"EHA", "Név",
        "Születési idő", "Szak", "Kezdés éve", "Hány éve hallgató"};
    private ResultSet hallgatokResultSet = null;
    private List<KurzusFelvetel> kurzusFelvetelek;
    private ResultSet kurzusFelvetelekResultSet = null;

    public String getColumnName(int idx) {
        return hallgatokColumnNames[idx];
    }

    public MyServer() {
        super();
        hallgatok = new ArrayList<Hallgato>();
        kurzusFelvetelek = new ArrayList<KurzusFelvetel>();
    }

    public void fillData() throws SQLException {
        hallgatok.clear();
        kurzusFelvetelek.clear();
        if (hallgatokResultSet != null) {
            hallgatokResultSet.close();
        }
        kurzusFelvetelekResultSet = executeQuery("select h.eha as eha, k.kurzusnev as kurzusnev, k.`kreditek szama` as kreditszam from Hallgatok h, Kurzusfelvetelek f, Kurzusok k where h.id = f.h_id and k.id = f.k_id;");
        while (kurzusFelvetelekResultSet.next()) {
            KurzusFelvetel k = new KurzusFelvetel(kurzusFelvetelekResultSet.getString("eha"), kurzusFelvetelekResultSet.getString("kurzusnev"), kurzusFelvetelekResultSet.getInt("kreditszam"));
            kurzusFelvetelek.add(k);
        }
        kurzusFelvetelekResultSet.close();
        hallgatokResultSet = executeQuery("select * from Hallgatok;");
        while (hallgatokResultSet.next()) {
            Hallgato h = new Hallgato(hallgatokResultSet.getInt("id"), hallgatokResultSet.getString("eha"), hallgatokResultSet.getString("nev"), hallgatokResultSet.getDate("szuletesi datum"));
            h.setSzak(hallgatokResultSet.getString("szak"));
            h.setKezdesEve(hallgatokResultSet.getInt("kezdes eve"));
            hallgatok.add(h);
        }
    }

    public List<Hallgato> getHallgatok() {
        return hallgatok;
    }

    public List<KurzusFelvetel> getKurzusFelvetelek() {
        return kurzusFelvetelek;
    }

    public int getHallgatokColumnCount() {
        return hallgatokColumnNames.length;
    }

    public void commitData() throws SQLException {
        hallgatokResultSet.beforeFirst();
        for (int i = 0; i < hallgatok.size(); i++) {
            Hallgato h = hallgatok.get(i);
            hallgatokResultSet.next();
            hallgatokResultSet.updateString("eha", h.getEha());
            hallgatokResultSet.updateString("nev", h.getNev());
            hallgatokResultSet.updateDate("szuletesi datum", h.getSzuletesiDatum());
            hallgatokResultSet.updateString("szak", h.getSzak());
            hallgatokResultSet.updateInt("kezdes eve", h.getKezdesEve());
            hallgatokResultSet.updateRow();
        }
    }

    @Override
    public void closeConnection() throws SQLException {
        if (hallgatokResultSet != null){
            hallgatokResultSet.close();
        }
        super.closeConnection();
    }

}
