package com.ryuuji.visual.pZone.profesor;

import logica.ExNihilo;
import logica.Search;
import logica.Utilities;

import javax.swing.*;

public class ProfesorCrear extends JFrame {
    private ProfesorAnalizar profesorAnalizar;
    private JPanel mainPanel;

    private JButton crearButton;

    private JTextField nombreField;
    private JTextField veriField;
    private JTextField rutField;

    private JLabel errorUsado;
    private JLabel errorInvalido;
    private JLabel errorVacio2;
    private JLabel errorVacio1;

    /**
     * Inicia la ventana asignando sus valores basicos, ademas de llamar a setListeners
     * @param profesorAnalizar Almacena esta ventana para mas tarde actualizarla cuando se cree un nuevo profesor
     */
    public ProfesorCrear(ProfesorAnalizar profesorAnalizar) {
        this.profesorAnalizar = profesorAnalizar;
        setTitle("Crear Profesor");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        setListeners();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * añade el listener al crearbutton, el que inicia el proceso de crear un profesor
     */
    public void setListeners(){
        crearButton.addActionListener(a->{
            clearError();
            if(comprobar()){
                crear();
                profesorAnalizar.fillProfesores();
                dispose();
            }
            pack();
        });
    }

    /**
     * oculta todos los mensajes de error.
     */
    public void clearError(){
        errorInvalido.setVisible(false);
        errorUsado.setVisible(false);
        errorVacio1.setVisible(false);
        errorVacio2.setVisible(false);
    }

    /**
     * Crea un nuevo profesor
     */
    public void crear(){
        ExNihilo.crearProfesor(Search.buscarColegio("Colegio San Francisco"),nombreField.getText(),rutField.getText()+veriField.getText());
    }

    /**
     * Comprueba los datos ingresados y muestra un mensaje de error cuando se encuentre uno en los datos ingresados
     * @return un booleano indicando si la comprobacion fue correcta
     */
    public boolean comprobar(){
        boolean vacio1 = nombreField.getText().trim().isEmpty();
        boolean vacio2 = rutField.getText().trim().isEmpty()||veriField.getText().trim().isEmpty();
        if(!vacio1&&!vacio2){
            boolean valido = Utilities.validarRut(rutField.getText(),veriField.getText());
            if(valido){
                boolean utilizado = Search.buscarEstudiante(rutField.getText()+veriField.getText())!=null ||
                    Search.buscarProfesor(rutField.getText()+veriField.getText())!=null||
                    Search.buscarApoderado(rutField.getText()+veriField.getText())!=null;
                if(!utilizado){
                    return true;
                }else{
                    errorUsado.setVisible(true);
                    return false;
                }
            }else{
                errorInvalido.setVisible(true);
                return false;
            }
        }else{
            if(vacio1){
                errorVacio1.setVisible(true);
            }
            if(vacio2){
                errorVacio2.setVisible(true);
            }
            return false;
        }
    }
}
