package mx.gob.jumapacelaya.views.verificacionfirma;

import com.vaadin.flow.component.HtmlComponent;
import com.vaadin.flow.component.UI;
import com.vaadin.flow.component.html.*;
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.router.BeforeEnterEvent;
import com.vaadin.flow.router.BeforeEnterObserver;
import com.vaadin.flow.router.PageTitle;
import com.vaadin.flow.router.Route;
import de.f0rce.signaturepad.SignaturePad;
import mx.gob.jumapacelaya.Services.PredioService;
import mx.gob.jumapacelaya.models.Predio;
import mx.gob.jumapacelaya.views.MainLayout;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

@PageTitle("Recibo Digital Firma")
@Route(value = "recibo", layout = MainLayout.class)
public class ReciboDgtalFirma extends VerticalLayout implements BeforeEnterObserver {

    private final PredioService predioService;
    private Predio predio;
    Span nombreCliente = new Span();

    public ReciboDgtalFirma(PredioService predioService) {
        this.predioService = predioService;
        this.predio = (Predio) UI.getCurrent().getSession().getAttribute("predio");

        if (predio == null) {
            Notification.show("No se ha proporcionado un predio válido.", 3000, Notification.Position.MIDDLE);
            UI.getCurrent().navigate("recibodigital");
        }


        cabezera();
        titulo();
        body();
        sign();
    }


    private void cabezera() {

        HorizontalLayout encabezadoLayout = new HorizontalLayout();
        encabezadoLayout.setWidthFull();
        encabezadoLayout.setPadding(true);

        // Obtener la fecha actual del sistema
        LocalDate fechaSistema = LocalDate.now();
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("EEEE d 'de' MMMM 'del' yyyy");
        String fechaFormateada = fechaSistema.format(formatter);

        Span fecha = new Span();
        fecha.setText("Celaya, Guanajuato a " + fechaFormateada);

        H2 presolicitud = new H2();
        presolicitud.setText("Firma Solicitud");

        encabezadoLayout.add(fecha);
        encabezadoLayout.addAndExpand(new HorizontalLayout());
        encabezadoLayout.add(presolicitud);
        this.add(encabezadoLayout);
    }


    private void titulo() {

        VerticalLayout tituloLayout = new VerticalLayout();

        H2 lblTitulo = new H2();
        lblTitulo.setText("JUNTA MUNICIPAL DE AGUA POTABLE Y ALCANTARILLADO DE CELAYA, GTO");



        tituloLayout.add(lblTitulo);

        this.add(tituloLayout);
    }


    private void body() {
        VerticalLayout bodyLayout = new VerticalLayout();

        H4 lblPresente = new H4("Estimado usuario:");
        H4 lblAtt = new H4("ATENTAMENTE");

        Paragraph parrafo1 = new Paragraph();
        parrafo1.setText(
                "Con la finalidad de contribuir al cuidado del medio ambiente, así como facilitarle que conozca de manera oportuna " +
                        "su estado de cuenta con este organismo, lo invitamos a sumarse a este propósito y acepte el envío de " +
                        "su recibo de manera digital a su cuenta de correo electrónico: "
        );

        HtmlComponent parrafo3 = new HtmlComponent("p");
        parrafo3.getElement().setProperty("innerHTML",
                "Para el predio: " + predio.getPredioid() + " ubicado en " + predio.getDirecmostrar() + ", a nombre de " + predio.getNomcliente() + "."
        );

        bodyLayout.add(lblPresente, parrafo1, parrafo3, lblAtt);
        this.add(bodyLayout);
    }


    private void sign() {
        VerticalLayout signLayout = new VerticalLayout();
        SignaturePad userPad = new SignaturePad();
        userPad.setBackgroundColor("#FFFFFF");
        userPad.setHeight("200px");
        userPad.setPenColor("#000000");
        userPad.getElement().getStyle().set("border", "1px solid black");


        Span predioCliente = new Span("Predio: " + predio.getPredioid());
        Span contratoCliente = new Span("Contrato: " + predio.getContrato());


        signLayout.add(userPad, nombreCliente, predioCliente, contratoCliente);
        signLayout.setSpacing(false);
        signLayout.setAlignItems(Alignment.CENTER);
        this.setSpacing(false);
        this.add(signLayout);
    }


    @Override
    public void beforeEnter(BeforeEnterEvent event) {
        String solicitante = event.getLocation().getQueryParameters().getParameters().get("solicitante") != null
                ? event.getLocation().getQueryParameters().getParameters().get("solicitante").stream().findFirst().orElse(null)
                : null;


        if (solicitante != null && !solicitante.isEmpty()) {
            nombreCliente.setText("Nombre del Solicitante: " + solicitante);

        } else {
            nombreCliente.setText("Sin solicitante");
        }
    }
}
