package com.ryuuji.visual.pZone.estudiante;


import logica.ExNihilo;
import logica.Search;
import org.jdesktop.swingx.JXDatePicker;
import orm.Estudiante;

import javax.swing.*;
import java.util.Date;

public class AñadirAsistencia extends JFrame {
    private JPanel mainPanel;

    private JRadioButton siRadio;
    private JRadioButton noRadio;

    private JXDatePicker datePicker;
    private JButton ingresarButton;

    private JLabel errorExiste;
    private JLabel errorSeleccionar;

    private boolean asistencia;
    private Estudiante estudiante;
    private VerAsistencias verAsistencias;

    /**
     * Inicia la ventana con sus valores basicos iniciales
     *
     * @param verAsistencias Almacena esta ventana para actualizarla cuando se cree una asistencia nueva
     * @param estudiante     Estudiante al cual se le añadira la asistencia
     */
    public AñadirAsistencia(VerAsistencias verAsistencias, Estudiante estudiante) {
        this.verAsistencias = verAsistencias;
        this.estudiante = estudiante;
        setTitle("Añador Asistencia");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        init();
        setVisible(true);
    }

    /**
     * llama a setlisteners y activa el radio button si
     */
    private void init() {
        setListener();
        siRadio.doClick();
    }

    /**
     * Le da un listener a el boton de ingresar el cual inicia el proceso de creacion
     */
    private void setListener() {
        ingresarButton.addActionListener(a -> {
            errorExiste.setVisible(false);
            errorSeleccionar.setVisible(false);
            setAsistencia();
            if (comprobar()) {
                crearAsistencia();
                verAsistencias.fillTable();
                dispose();
            }
            pack();
        });
    }

    /**
     * almacena si el alumno asiste o no ese dia, segun el radiobutton seleccionado
     */
    private void setAsistencia() {
        asistencia = siRadio.isSelected();
    }

    /**
     * Comprueba que los datos ingresados son correctos, si es que hay algun problema, se mostrara un error en la ventana
     * @return boolean indicando si la comprobacion fue correcta
     */
    private boolean comprobar() {
        Date date = datePicker.getDate();
        if (date != null) {
            boolean existe = Search.buscarAsistencia(estudiante, date, true) != null
                    || Search.buscarAsistencia(estudiante, date, false) != null;
            if (!existe) {
                return true;
            } else {
                errorExiste.setVisible(true);
                return false;
            }
        } else {
            errorSeleccionar.setVisible(true);
            return false;
        }
    }

    /**
     * Crea la asistencia
     */
    private void crearAsistencia() {
        Date date = datePicker.getDate();
        ExNihilo.crearAsistencia(date, asistencia, estudiante);
    }

}
