package com.ryuuji.visual.rZone;

import logica.Listas;
import logica.Search;
import logica.reportes.ReporteNotasProfesor;
import orm.Curso;
import orm.Profesor;

import javax.swing.*;
import java.io.File;

public class ReporteProfesorFrame extends JFrame {
    private JButton generarButton;
    private JPanel mainPanel;
    private JComboBox<String> cursosBox;
    private JComboBox<String> profesorBox;
    private JTextField nombreField;

    private Curso curso;
    private Profesor profesor;

    /**
     * Inicia la ventana y le asigna valores basicos, ademas llama a init
     */
    public ReporteProfesorFrame() {
        setTitle("Generar Reporte Profesor");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * llama a los metodos para que se llenen de datos los componentes las ventanas ademas del setListeners
     */
    private void init() {
        fillCurso();
        setCurso();
        fillProfesor();
        setProfesor();
        setListeners();
    }

    /**
     * Añade los listeners a los combobox y al boton
     */
    private void setListeners() {
        cursosBox.addActionListener(a -> {
            setCurso();
            fillProfesor();
            setProfesor();
        });
        profesorBox.addActionListener(a -> {
            setProfesor();
        });
        generarButton.addActionListener(a -> {
            generar();
        });
    }

    /**
     * genera el reporte con los datos seleccionados
     */
    private void generar() {
        ReporteNotasProfesor rnp = new ReporteNotasProfesor(profesor);
        rnp.generar(new File("files/xslt"), true, true, true, true, true);
        JOptionPane.showMessageDialog(this, "El reporte a sido generado");
    }

    /**
     * llena el combobox de cursos con estos.
     */
    public void fillCurso() {
        String[] cursos = Listas.listaCursos();
        cursosBox.removeAllItems();
        if (cursos != null) {
            for (String curso : cursos) {
                cursosBox.addItem(curso);
            }
        }
    }

    /**
     * Almacena el curso seleccionado en el combobox de cursos
     */
    public void setCurso() {
        curso = null;
        String selected = (String) cursosBox.getSelectedItem();
        if (selected != null) {
            int nivel = Integer.valueOf(selected.split("-")[0]);
            String letra = selected.split("-")[1];
            curso = Search.buscarCurso(nivel, letra);
        }
    }

    /**
     * llena el combobox de profesores que existen en el curso seleccionado
     */
    public void fillProfesor() {
        String[] profesores = Listas.listaProfesores(curso);
        profesorBox.removeAllItems();
        if (profesores != null) {
            for (String profesor : profesores) {
                profesorBox.addItem(profesor);
            }
        }
    }

    /**
     * almacena el profesor seleccionado en la combobox
     */
    public void setProfesor() {
        profesor = null;
        nombreField.setText("");
        String selected = (String) profesorBox.getSelectedItem();
        if (selected != null) {
            profesor = Search.buscarProfesor(selected);
        }
        if (profesor != null) {
            nombreField.setText(profesor.getNombre());
        }

    }
}
