package com.ryuuji.visual.pZone.apoderado;

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

import javax.swing.*;

public class ApoderadoCrear extends JFrame {
    private JPanel mainPanel;
    private JButton crearButton;
    private JTextField nombreField;
    private JTextField rutField;
    private JTextField veriField;
    private JLabel errorVacio1;
    private JLabel errorVacio2;
    private JLabel errorUsado;
    private JLabel errorInvalido;

    private ApoderadoAnalizar apoderadoAnalizar;

    /**
     * Inicia la ventana con sus valores iniciales ademas de llamar a init()
     * @param apoderadoAnalizar guarda esta ventana para cuando se cree el apoderado, esta se pueda actualizar
     */
    public ApoderadoCrear(ApoderadoAnalizar apoderadoAnalizar) {
        setTitle("Crear Apoderado");
        this.apoderadoAnalizar = apoderadoAnalizar;
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * Llama al metodo setListeners()
     */
    public void init(){
        setListeners();
    }

    /**
     * Añade el listener al boton crear
     */
    public void setListeners(){
        crearButton.addActionListener(a->{
            clearError();
            if(comprobar()){
                crear();
                apoderadoAnalizar.fillApoderadosTable();
                dispose();
            }
            pack();
        });
    }

    /**
     * Limpia todos los errores de la ventana
     */
    public void clearError(){
        errorInvalido.setVisible(false);
        errorUsado.setVisible(false);
        errorVacio1.setVisible(false);
        errorVacio2.setVisible(false);
    }

    /**
     * Crea el apoderado
     */
    public void crear(){
        ExNihilo.crearApoderado(Search.buscarColegio("Colegio San Francisco"),nombreField.getText(),rutField.getText()+veriField.getText());
    }

    /**
     * comprueba los datos ingresados muestra un mensaje de error si existe algun error
     * @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;
        }
    }

}

