package mx.gob.jumapacelaya.ui;

import com.vaadin.flow.component.button.Button;
import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.grid.Grid;
import com.vaadin.flow.component.html.H4;
import com.vaadin.flow.component.html.H5;
import com.vaadin.flow.component.icon.Icon;
import com.vaadin.flow.component.icon.VaadinIcon;
import com.vaadin.flow.component.notification.Notification;
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.component.textfield.TextField;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import jakarta.annotation.security.PermitAll;
import mx.gob.jumapacelaya.models.PlanAnual;

import java.lang.reflect.Array;
import java.time.LocalDate;
import java.util.Arrays;
import java.util.List;

@PermitAll
@PageTitle("Plan Anual de Mantenimiento")
@Route(value = "/", layout = MainLayout.class)
@CssImport("./themes/sistema-mantenimiento/styles.css")
public class PlanAnualView extends VerticalLayout {

    HorizontalLayout header = new HorizontalLayout();
    H4 titulo = new H4();
    H5 titulo1 = new H5();

    public PlanAnualView() {
        VerticalLayout headerLayout = new VerticalLayout();
        headerLayout.addClassName("plan-anual-header");

        titulo.addClassName("plan-anual-titulo");
        titulo1.addClassName("plan-anual-titulo1");
        titulo.setText("Plan Anual de Mantenimiento Preventivo de Equipo de Computo");
        titulo1.setText("2024");

        TextField nomenclaturaTxt = new TextField();
        nomenclaturaTxt.setValue("FR01-PA-7.1.3-02");
        nomenclaturaTxt.setReadOnly(true);
        nomenclaturaTxt.addClassName("nomenclatura-txt");

        header.setAlignSelf(Alignment.CENTER, titulo, titulo1);

        headerLayout.add(titulo, titulo1);


        Grid<PlanAnual> planAnualGrid = new Grid<>();
        planAnualGrid.addColumn(PlanAnual::getNumero).setHeader("No.");
        planAnualGrid.addColumn(PlanAnual::getNomEquipo).setHeader("Equipo").setAutoWidth(true);
        planAnualGrid.addColumn(PlanAnual::getDepartamento).setHeader("Departamento").setAutoWidth(true);

        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getMonitor())).setHeader("Monitor").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getTeclado())).setHeader("Teclado").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getMouse())).setHeader("Mouse").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getRegulador())).setHeader("Regulador").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getCpu())).setHeader("CPU").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getImpresora())).setHeader("Impresora").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getMiniPrint())).setHeader("MiniPrint").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getLaptop())).setHeader("Laptop").setAutoWidth(true);
        planAnualGrid.addComponentColumn(plan -> getIcon(plan.getEscaner())).setHeader("Escáner").setAutoWidth(true);
        planAnualGrid.addColumn(PlanAnual::getFecha).setHeader("Fecha Programada").setAutoWidth(true);
        planAnualGrid.addColumn(PlanAnual::getSmt).setHeader("S.M.T").setAutoWidth(true);
        planAnualGrid.addColumn(PlanAnual::getEstado).setHeader("Estado").setAutoWidth(true);
        planAnualGrid.addColumn(PlanAnual::getFechaRealizado).setHeader("Fecha Realizado").setAutoWidth(true);

        planAnualGrid.addComponentColumn(plan -> {
            Button btnRealizar = new Button("Realizar");
            btnRealizar.addClickListener(event -> {
                LocalDate fechaSistem = LocalDate.now();
                String fechaStr = fechaSistem.toString();
                btnRealizar.getUI().ifPresent(ui -> ui.navigate("mantenimiento?fecha=" + fechaStr + "&tipo=PREVENTIVO"));
            });
            return btnRealizar;
        }).setHeader("Realizar").setAutoWidth(true);

        planAnualGrid.setItems();


        //Datos de ejemplo
        List<PlanAnual> planes = Arrays.asList(
                new PlanAnual(1, "INFORM15","T.I", "No", "Logitech", "Logitech", "APC", "si", "HP", "No", "Dell", "Canon", "01-01-2024", "Hector", "Pendiente", "02-01-2024"),
                new PlanAnual(2, "ATENCI01", "Atencion", "si", "Dell", "no", "APC", "AMD", "Brother", "Sí", "HP", "no", "15-01-2024", "JuanPI", "Realizado", "16-01-2024"),
                new PlanAnual(3, "MEDCAT08", "T.I", "si", "Dell", "no", "APC", "AMD", "Brother", "Sí", "HP", "no", "15-01-2024", "JuanPI", "Cancelado", "16-01-2024"),
                new PlanAnual(4, "CALAGUA03", "T.I", "si", "Dell", "no", "APC", "AMD", "Brother", "Sí", "HP", "no", "15-01-2024", "Hector", "Realizado", "16-01-2024")
        );

        planAnualGrid.setItems(planes);


        VerticalLayout gridLayout = new VerticalLayout();
        gridLayout.add(planAnualGrid);


        this.setPadding(false);
        this.setMargin(false);
        this.setSpacing(false);
        add(headerLayout, gridLayout);
    }

    private Icon getIcon(String value) {
        if (value.equalsIgnoreCase("Si") || !value.equalsIgnoreCase("No")) {
            return new Icon(VaadinIcon.CHECK_CIRCLE);
        } else {
            return new Icon();
        }
    }
}
