package gy4simpledb.gui;

import gy4simpledb.dbclasses.Hallgato;
import gy4simpledb.dbclasses.MyServer;
import java.sql.SQLException;
import java.sql.Date;
import javax.swing.table.AbstractTableModel;

public class HallgatokTableModel extends AbstractTableModel {

    private MyServer server;

    HallgatokTableModel(MyServer server) {
        this.server = server;
    }

    public int getRowCount() {
        return server.getHallgatok().size();
    }

    public int getColumnCount() {
        return server.getHallgatokColumnCount();
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Hallgato h = server.getHallgatok().get(rowIndex);
        switch (columnIndex) {
            //case 0: return h.getId();
            case 0:
                return h.getEha();
            case 1:
                return h.getNev();
            case 2:
                return h.getSzuletesiDatum();
            case 3:
                return h.getSzak();
            case 4:
                return h.getKezdesEve();
            case 5:
                return h.getHanyEveHallgato();
            default:
                return null;
        }
    }

    @Override
    public String getColumnName(int column) {
        return server.getColumnName(column);
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return (columnIndex < 5);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Hallgato h = server.getHallgatok().get(rowIndex);
        switch (columnIndex) {
            //case 0: h.setId((Integer) aValue);
            case 0:
                h.setEha((String) aValue);
                break;
            case 1:
                h.setNev((String) aValue);
                break;
            case 2:
                h.setSzuletesiDatum((Date) aValue);
                break;
            case 3:
                h.setSzak((String) aValue);
                break;
            case 4:
                h.setKezdesEve((Integer) aValue);
                break;
        }
        fireTableCellUpdated(rowIndex, columnIndex);
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {
        if (getRowCount() == 0) {
            return null;
        } else {
            return getValueAt(0, columnIndex).getClass();
        }
    }

    public void commitChanges() {
        try {
            server.commitData();
        } catch (SQLException sqlex) {
            DbFrame.getDbFrameInstance().showError(sqlex.getMessage());
        }
    }

    public void rollbackChanges() {
        try {
            server.fillData();
            fireTableDataChanged();
        } catch (SQLException sqlex) {
            DbFrame.getDbFrameInstance().showError(sqlex.getMessage());
        }
    }
}
