package com.ryuuji.visual.rZone;

import com.ryuuji.visual.MainScreen;
import logica.reportes.Reporte;
import logica.reportes.ReporteApoderado;
import logica.reportes.ReporteApoderadosMasEstudiantes;
import logica.reportes.ReporteReprobando;

import javax.swing.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import java.util.ArrayList;

public class RZone extends JFrame {
    private JComboBox<String> boxReportes;
    private JButton generarReporteButton;
    private JPanel mainPanel;
    private JTextPane textPane1;
    private ArrayList<String> descripciones;
    private Reporte reporte;

    /**
     * Inicia la ventana y asigna los valores basicos a esta ademas llama a init()
     */
    public RZone() {
        setTitle("Zona de reportes");
        setContentPane(mainPanel);
        init();
        setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
        addWindowListener(
                new WindowAdapter() {
                    @Override
                    public void windowClosing(WindowEvent e) {
                        new MainScreen();
                        dispose();
                    }
                }
        );
        setResizable(false);
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * inicia los posibles datos de el textArea y llena el combobox.
     */
    private void init() {
        descripciones = new ArrayList<>();
        descripciones.add("Reporte destinado a un apoderado, muestra todas las notas, planificaciones y anotaciones de sus pupilos.");
        descripciones.add("Reporte que muestra a los profesores los promedios de notas de los estudiantes de sus asignaturas");
        descripciones.add("Reporte que muestra el porcentaje de asistencia y las notas los alumnos");
        descripciones.add("Reporte que muestra los estudiantes que se encuentran bajo un porcentaje indicado de asistencia");
        descripciones.add("Reporte que presenta los estudiantes que estan reprobando");
        descripciones.add("Reporte que muestra los apoderados con mas de un estudiante en el establecimiento");
        descripciones.add("Reporte con la planificacion de actividades de cada alumno de un apoderado");
        boxReportes.setModel(new DefaultComboBoxModel<>(
                new String[]{
                        "Reporte general para Apoderado",
                        "Reporte Profesor",
                        "Reporte asistencia y notas",
                        "Reporte baja asistencia",
                        "Reporte estudiantes reprobando",
                        "Reporte apoderados con mas de un pupilo",
                        "Reporte planificacion de actividades"}));
        textPane1.setText(descripciones.get(0));
        reporte = new Reporte(new File("files/xslt"));
        setListeners();
    }

    /**
     * Añade los listeners al combobox y al boton de generar
     * el listener del combobox hace cambiar el contenido del textarea dependiendo cual se seleccione
     * el listener depende de cual reporte este seleccionado en el boxReportes
     * pero llama a la ventana correspondiente a esta o genera el reporte directamente, dependiendo si necesita datos adicionales o no
     */
    private void setListeners() {
        boxReportes.addActionListener(a -> {
            textPane1.setText(descripciones.get(boxReportes.getSelectedIndex()));
        });
        generarReporteButton.addActionListener(a -> {
            switch (boxReportes.getSelectedIndex()) {
                case 0:
                    ReporteApoderado.generar(new File("files/xslt"), true, true, true, true, true);
                    JOptionPane.showMessageDialog(this, "El reporte a sido generado");
                    break;
                case 1:
                    new ReporteProfesorFrame();
                    break;
                case 2:
                    new ReporteEstudianteFrame();
                    break;
                case 3:
                    new ReporteBajaAsistenciaFrame();
                    break;
                case 4:
                    ReporteReprobando rr = new ReporteReprobando();
                    rr.generar(new File("files/xslt"), true, true, true, true, true);
                    JOptionPane.showMessageDialog(this, "El reporte a sido generado");
                    break;
                case 5:
                    ReporteApoderadosMasEstudiantes rame = new ReporteApoderadosMasEstudiantes();
                    rame.generar(new File("files/xslt"), true, true, true, true, true);
                    JOptionPane.showMessageDialog(this, "El reporte a sido generado");
                    break;
                case 6:
                    new ReportePlanificacionesFrame(reporte);
                    break;
            }
        });
    }

}
