package com.ryuuji.visual.rZone;

import logica.Listas;
import logica.Search;
import logica.reportes.Reporte;
import logica.reportes.ReporteAsistenciaYNotas;
import orm.Curso;
import orm.Estudiante;

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

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

    private Estudiante estudiante;
    private Curso curso;

    /**
     * Inicia la ventana asignando valores basicos ademas llama al metodo inti
     */
    public ReporteEstudianteFrame() {
        setTitle("Generar Reporte Estudiante");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * llama a los metodos que llena de datos a los campos de la ventana y asignan los listeners y otras funciones
     */
    private void init() {
        fillCurso();
        setCurso();
        fillEstudiante();
        setEstudiante();
        setListeners();
    }

    /**
     * Añade los listeners a las combobox y el boton de generar
     */
    private void setListeners() {
        cursosBox.addActionListener(a -> {
            setCurso();
            fillEstudiante();
            setEstudiante();
        });
        estudianteBox.addActionListener(a -> {
            setEstudiante();
        });
        generarButton.addActionListener(a -> {
            generar();
        });
    }

    /**
     * Genera el reporte con los datos ingresados
     */
    private void generar() {
        ReporteAsistenciaYNotas reayn = new ReporteAsistenciaYNotas(estudiante);
        reayn.generar(new File("files/xslt"), true, true, true, true, true);
        JOptionPane.showMessageDialog(this, "El reporte a sido generado");
    }

    /**
     * llena el combobx 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 la combobox
     */
    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 la combobox de estudiantes con estos
     */
    public void fillEstudiante() {
        String[][] estudiantes = Listas.listaEstudiantes(curso);
        estudianteBox.removeAllItems();
        if (estudiantes != null) {
            for (String[] estudiante : estudiantes) {
                estudianteBox.addItem(estudiante[1]);
            }
        }
    }

    /**
     * Almacena el estudiante seleccionado en la combobox
     */
    public void setEstudiante() {
        estudiante = null;
        nombreField.setText("");
        String selected = (String) estudianteBox.getSelectedItem();
        if (selected != null) {
            estudiante = Search.buscarEstudiante(selected);
        }
        if (estudiante != null) {
            nombreField.setText(estudiante.getNombre());
        }

    }
}
