package com.ryuuji.visual.cZone.curso;

import logica.ExNihilo;
import logica.Search;

import javax.swing.*;

public class CursoCrear extends JFrame {
    private final AnalizarCursos parent;
    private JButton crearButton;
    private JSpinner spinner;
    private JPanel mainPanel;
    private JRadioButton aRadioButton;
    private JRadioButton bRadioButton;
    private JLabel errorExiste;

    /**
     * Inicia la ventana asignando los valores basicos.
     *
     * @param analizarCursos pide la variable analizarCursos para almacenarla y mas tarde actualizarla para mostrar los datos nuevos.
     */
    public CursoCrear(AnalizarCursos analizarCursos) {
        this.parent = analizarCursos;
        setTitle("Crear Curso");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * Llama a setlisteners y le hace click al radiobutton a
     */
    public void init() {
        aRadioButton.doClick();
        setListeners();
    }

    /**
     * Añade un listener a crearbutton el cual hace el procedimiento de creacion de curso
     */
    public void setListeners() {
        crearButton.addActionListener(a -> {
            errorExiste.setVisible(false);
            if (comprobar()) {
                crear();
                parent.fillCursos();
                dispose();
            }
        });
    }

    /**
     * Crea un curso nuevo, se llama este metodo solo una vez estan comprobados los datos.
     */
    public void crear() {
        String letra = aRadioButton.isSelected() ? "A" : "B";
        ExNihilo.crearCurso((Integer) spinner.getValue(), letra, Search.buscarColegio("Colegio San Francisco"));
    }

    /**
     * Comprueba que los datos ingresados sean correctos
     * muestra un mensaje de error en la ventana dependiendo del error
     * @return un booleano indicando si los datos son correctos o no.
     */
    public boolean comprobar() {
        String letra = aRadioButton.isSelected() ? "A" : "B";
        boolean existe = Search.buscarCurso((Integer) spinner.getValue(), letra) != null;
        if (!existe) {
            return true;
        } else {
            errorExiste.setVisible(true);
            return false;
        }
    }

    /**
     * Inicia el JSpinner asignandole los limites que debe tener y el valor incial
     */
    private void createUIComponents() {
        spinner = new JSpinner(new SpinnerNumberModel(1, 1, 100, 1));
    }
}
