package com.ryuuji.visual.pZone.estudiante;

import logica.ExNihilo;
import logica.Search;
import logica.Utilities;
import orm.Estudiante;
import orm.Profesor;

import javax.swing.*;

public class AñadirAnotacion extends JFrame {
    private JPanel mainPanel;
    private JRadioButton positivaRadio;
    private JRadioButton negativaRadio;
    private JTextArea descripcionField;
    private JTextField rutField;
    private JTextField verificador;
    private JButton añadirButton;
    private JLabel errorVacio2;
    private JLabel errorInvalido;
    private JLabel errorNoExiste;
    private JLabel errorVacio1;

    private Estudiante estudiante;
    private boolean positiva = true;
    private final VerAnotaciones verAnotaciones;

    /**
     * Inicia la ventana asignando sus valores basicos
     * @param verAnotaciones Almacena la ventana para actualizarla cuando se cree la nueva anotacion
     * @param estudiante Estudiante al que se le añadira la anotacion
     */
    public AñadirAnotacion(VerAnotaciones verAnotaciones, Estudiante estudiante) {
        this.verAnotaciones = verAnotaciones;
        this.estudiante = estudiante;
        setTitle("Añadir Anotacion");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        init();
        setVisible(true);
    }

    /**
     * Llama a setlisteners y le da clic al radiobutton positiva
     */
    private void init(){
        positivaRadio.doClick();
        setListeners();
    }

    /**
     * le da un listener a añadir button, este inicia la secuencia de creacion de anotacion
     */
    private void setListeners(){
        añadirButton.addActionListener(a->{
            setPositiva();
            errorNoExiste.setVisible(false);
            errorInvalido.setVisible(false);
            errorVacio2.setVisible(false);
            errorVacio1.setVisible(false);
            if(comprobarDatos()){
                crear();
                dispose();
            }
            pack();
        });
    }

    /**
     * Almacena el si la anotacion es positiva o no, dependiendo de lo seleccionado en los radiobutton
     */
    private void setPositiva(){
        positiva = positivaRadio.isSelected();
    }

    /**
     * Comprueba los datos ingresados, si hay lgun error con estos, mostrara un error en la ventana
     * @return booleano indicando si la comprobacion fue correcta
     */
    private boolean comprobarDatos(){
        if((rutField.getText()+verificador.getText()).trim().isEmpty()){
            errorVacio2.setVisible(true);
            return false;
        }
        if(!Utilities.validarRut(rutField.getText(),verificador.getText())){
            errorInvalido.setVisible(true);
            return false;
        }
        String rut = rutField.getText() + verificador.getText();
        Profesor profesor = Search.buscarProfesor(rut);
        boolean existe = profesor!=null;
        boolean vacio1 = descripcionField.getText().trim().isEmpty();
        if(existe&&!vacio1){
            return true;
        }else{
            if(!existe){
                errorNoExiste.setVisible(true);
                return false;
            }
            if(vacio1){
                errorVacio1.setVisible(true);
                return false;
            }
        }
        return false;
    }

    /**
     * Crea la anotacion nueva
     */
    private void crear(){
        String descripcion = descripcionField.getText();
        Profesor profesor = Search.buscarProfesor(rutField.getText()+verificador.getText());
        ExNihilo.crearAnotacion(positiva, descripcion, estudiante,profesor);
        verAnotaciones.fillTable();
    }
}
