package dev.lions.btpxpress.view;

import jakarta.annotation.PostConstruct;
import jakarta.enterprise.context.SessionScoped;
import jakarta.inject.Named;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;

/**
 * Bean de session pour gérer les informations de l'utilisateur connecté.
 * 
 * <p>Ce bean stocke les informations de session de l'utilisateur authentifié,
 * telles que le nom, l'email, l'avatar, et les statistiques rapides.</p>
 * 
 * @author BTP Xpress Team
 * @version 1.0
 */
@Named("userSession")
@SessionScoped
@Getter
@Setter
public class UserSessionBean implements Serializable {

    private static final long serialVersionUID = 1L;

    private String nomComplet;
    private String email;
    private String avatarUrl;
    private String role;
    private int nombreNotificationsNonLues;
    private int nombreMessagesNonLus;

    /**
     * Initialise les données de l'utilisateur connecté.
     */
    @PostConstruct
    public void init() {
        // TODO: Récupérer depuis le token JWT ou la session OIDC
        nomComplet = "Jean Dupont";
        email = "jean.dupont@btpxpress.com";
        avatarUrl = "/resources/freya-layout/images/avatar-profilemenu.png";
        role = "Gestionnaire de Projets";
        nombreNotificationsNonLues = 5;
        nombreMessagesNonLus = 3;
    }

    /**
     * Retourne les initiales de l'utilisateur pour l'avatar.
     * 
     * @return Les initiales (ex: "JD" pour "Jean Dupont")
     */
    public String getInitiales() {
        if (nomComplet == null || nomComplet.trim().isEmpty()) {
            return "U";
        }
        
        String[] parts = nomComplet.trim().split("\\s+");
        if (parts.length >= 2) {
            return String.valueOf(parts[0].charAt(0)).toUpperCase() + 
                   String.valueOf(parts[1].charAt(0)).toUpperCase();
        } else if (parts.length == 1) {
            return parts[0].substring(0, Math.min(2, parts[0].length())).toUpperCase();
        }
        return "U";
    }

    /**
     * Action de déconnexion.
     * 
     * @return La page de login
     */
    public String deconnecter() {
        // TODO: Implémenter la déconnexion OIDC/Keycloak
        return "/login?faces-redirect=true";
    }
}

