package mx.gob.jumapacelaya.views.login;

import com.vaadin.flow.component.dependency.CssImport;
import com.vaadin.flow.component.html.Image;
import com.vaadin.flow.component.login.LoginForm;
import com.vaadin.flow.component.login.LoginI18n;
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 com.vaadin.flow.server.auth.AnonymousAllowed;
import mx.gob.jumapacelaya.api.RedmineClient;
import mx.gob.jumapacelaya.services.UserService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Route("login")
@PageTitle("Login")
@AnonymousAllowed
@CssImport("./themes/soportet.iv1.2/styles.css")
public class LoginView extends VerticalLayout implements BeforeEnterObserver {

    private static final Logger log = LoggerFactory.getLogger(LoginView.class);
    private final LoginForm login = new LoginForm();

    public LoginView() {
        login.addClassName("special");

        // Configuración de la vista
        addClassName("login-rich-content");
        setSizeFull();
        setPadding(false);
        setMargin(false);

        // Crear el layout horizontal
        HorizontalLayout mainLayout = new HorizontalLayout();
        mainLayout.setSizeFull();
        mainLayout.setPadding(false);
        mainLayout.setMargin(false);

        // Configuración de la imagen
        Image logo = new Image("images/bckgndNvo.png", "Fondo Nvo color");
        logo.addClassName("login-logo");

        // Configuración de i18n para el formulario de login
        LoginI18n i18n = LoginI18n.createDefault();
        LoginI18n.Form i18nFormulario = i18n.getForm();
        i18nFormulario.setTitle("Soporte Técnico Gcia. de T.I");
        i18nFormulario.setUsername("Usuario");
        i18nFormulario.setPassword("Contraseña");
        i18nFormulario.setSubmit("Iniciar sesión");
        i18n.setForm(i18nFormulario);

        // Configuración de los mensajes de error
        LoginI18n.ErrorMessage i18nError = i18n.getErrorMessage();
        i18nError.setTitle("Credenciales incorrectas");
        i18nError.setMessage("Usuario o contraseña incorrectos, verifica tus credenciales");
        i18n.setErrorMessage(i18nError);

        i18n.setAdditionalInformation("Versión 2.0.0");

        // Configuración del formulario de login
        login.setAction("login");
        login.setForgotPasswordButtonVisible(false);
        login.setI18n(i18n);
        login.getStyle().set("background-color", "#A02142");

        // Crear un contenedor para el formulario
        VerticalLayout loginFormContainer = new VerticalLayout();
        Image imageLogin = new Image("images/JUMAPA_NVO.png", "Logo");
        imageLogin.setWidth("300px");

        loginFormContainer.add(imageLogin);
        loginFormContainer.add(login);
        loginFormContainer.setSizeUndefined();
        loginFormContainer.setPadding(false);
        loginFormContainer.setMargin(false);
        loginFormContainer.setAlignItems(Alignment.CENTER);
        loginFormContainer.setJustifyContentMode(JustifyContentMode.CENTER);
        loginFormContainer.getElement().getThemeList().add("dark");

        // Añadir la imagen y el contenedor del formulario al layout principal
        mainLayout.add(loginFormContainer, logo);
        mainLayout.setFlexGrow(1, loginFormContainer);
        mainLayout.setFlexGrow(2, logo);

        // Añadir el layout principal a la vista
        add(mainLayout);
    }

    @Override
    public void beforeEnter(BeforeEnterEvent beforeEnterEvent) {
        // Mostrar el mensaje de error si hay un parámetro de error en la URL
        if (beforeEnterEvent.getLocation()
                .getQueryParameters()
                .getParameters()
                .containsKey("error")) {
            login.setError(true);
        }
    }
}
