package com.ryuuji.visual.pZone.estudiante;

import logica.ExNihilo;
import logica.Listas;
import logica.Search;
import orm.Asistencia;
import orm.Estudiante;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class VerAsistencias extends JFrame {

    private JPanel mainPanel;
    private JTable table;
    private JButton cambiarButton;
    private JButton salirButton;
    private JLabel errorSeleccionar;
    private JButton crearButton;

    private Estudiante estudiante;
    private Asistencia asistencia;

    /**
     * Crea la ventana de ver asistencias con sus valores basicos iniciales
     *
     * @param estudiante Estudiante al que le pertenecen las asistencias
     */
    public VerAsistencias(Estudiante estudiante) {
        this.estudiante = estudiante;
        setTitle("Ver Asistencias");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
        init();
    }

    /**
     * llama a los metodos setListeners y filltable
     */
    private void init() {
        setListeners();
        fillTable();
    }

    /**
     * inicia los listeners para los botones y la table
     * el boton cambiar, invertira la asistencia
     */
    private void setListeners() {
        crearButton.addActionListener(a -> {
            errorSeleccionar.setVisible(false);
            new AñadirAsistencia(this, estudiante);
            pack();
        });
        cambiarButton.addActionListener(a -> {
            errorSeleccionar.setVisible(false);
            if (asistencia != null) {
                ExNihilo.modificarAsistencia(asistencia, null, !asistencia.getAsistio(), null);
                fillTable();
            } else {
                errorSeleccionar.setVisible(true);
            }
            pack();
        });
        table.getSelectionModel().addListSelectionListener(a -> setAsistencia());
        salirButton.addActionListener(a -> dispose());
    }

    /**
     * Almacena la asistencia seleccionada en la tabla
     */
    private void setAsistencia() {
        asistencia = null;
        SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy");
        if (table.getSelectedRow() >= 0) {
            try {
                Date date = format.parse((String) table.getValueAt(table.getSelectedRow(), 0));
                boolean asistio = table.getValueAt(table.getSelectedRow(), 1).equals("Si");
                asistencia = Search.buscarAsistencia(estudiante, date, asistio);
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }

    /**
     * Llena la tabla con la lista de asistencia del estudiante
     */
    public void fillTable() {
        DefaultTableModel model = (DefaultTableModel) table.getModel();
        model.setRowCount(0);
        String[][] lista = Listas.listaAsistencia(estudiante);
        if (lista != null) {
            for (String[] asistencia : lista) {
                model.addRow(asistencia);
            }
        }
    }

    /**
     * Inicia la tabla con sus valores basicos
     */
    private void createUIComponents() {
        table = new JTable(new DefaultTableModel(new String[]{"Fecha", "¿Asistio?"}, 0));
    }
}
