package com.ryuuji.visual.cZone.asignatura;

import logica.ExNihilo;
import org.jdesktop.swingx.JXDatePicker;
import orm.Actividad;

import javax.swing.*;
import java.util.Date;

public class ActividadModificar extends JFrame {
    private Actividad actividad;
    private AnalizarAsignaturas analizarAsignaturas;
    private JXDatePicker picker;
    private JPanel mainPanel;
    private JButton modificarButton;
    private JTextField tipoField;
    private JLabel errorVacio1;
    private JLabel errorVacio2;

    /**
     * Inicia la ventana y asigna los valores basicos
     *
     * @param actividad           Actividad que sera modificada
     * @param analizarAsignaturas almacena la ventana para actualizarla una vez se termine de modificar la actividad
     */
    public ActividadModificar(Actividad actividad, AnalizarAsignaturas analizarAsignaturas) {
        this.actividad = actividad;
        this.analizarAsignaturas = analizarAsignaturas;
        setTitle("Modificar Actividad");
        setContentPane(mainPanel);
        setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
        setResizable(false);
        init();
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    /**
     * Inicia los campos con los valores de la actividad almacenada
     */
    public void init() {
        picker.setDate(actividad.getFecha());
        tipoField.setText(actividad.getTipo());
        setListeners();
    }

    /**
     * Inicia los listeners de la ventana.
     */
    public void setListeners() {
        modificarButton.addActionListener(a -> {
            errorVacio1.setVisible(false);
            errorVacio2.setVisible(false);
            if (comprobar()) {
                modificar();
                analizarAsignaturas.fillPlanificacion();
                dispose();
            }
            pack();
        });
    }

    /**
     * Comprueba los valores ingresados y muestra un error si es que existe algun problema con esots
     *
     * @return booleano indicando si los datos son correctos o no.
     */
    public boolean comprobar() {
        boolean vacio1 = tipoField.getText().trim().isEmpty();
        boolean vacio2 = picker.getDate() == null;
        if (!vacio1 && !vacio2) {
            return true;
        } else {
            if (vacio1) {
                errorVacio1.setVisible(true);
            }
            if (vacio2) {
                errorVacio2.setVisible(true);
            }
        }
        return false;
    }

    /**
     * Modifica la actividad con los valores ingresados.
     */
    public void modificar() {
        Date fecha = picker.getDate();
        String tipo = tipoField.getText();
        ExNihilo.modificarActividad(actividad, fecha, tipo, null);
    }

}
