package com.gbcm.client.beans;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Logger;

import com.gbcm.client.service.ClientRestService;
import com.gbcm.server.api.dto.client.ClientDTO;
import com.gbcm.server.api.dto.common.PagedResponseDTO;

import jakarta.enterprise.context.RequestScoped;
import jakarta.inject.Inject;
import jakarta.inject.Named;

/**
 * Bean pour la gestion des clients dans l'interface web.
 * Connecté au serveur backend pour récupérer les vraies données.
 *
 * @author GBCM Development Team
 * @version 1.0
 * @since 1.0
 */
@Named("clientBean")
@RequestScoped
public class ClientBean implements Serializable {

    private static final Logger logger = Logger.getLogger(ClientBean.class.getName());

    @Inject
    private ClientRestService clientRestService;

    /**
     * Obtient la liste des clients depuis le serveur backend
     */
    public List<ClientDTO> getClients() {
        try {
            logger.info("Récupération de la liste des clients depuis le serveur backend");

            PagedResponseDTO<ClientDTO> pagedResponse = clientRestService.getClients(0, 50, null, null, null, null);
            List<ClientDTO> clients = pagedResponse.getContent();

            logger.info("Retour de " + clients.size() + " clients depuis le serveur");
            return clients;
        } catch (Exception e) {
            logger.severe("Erreur lors de la récupération des clients: " + e.getMessage());
            // Retourner une liste vide en cas d'erreur
            return new ArrayList<>();
        }
    }

    /**
     * Obtient la date actuelle pour l'affichage
     */
    public Date getCurrentDate() {
        return new Date();
    }

    /**
     * Crée un nouveau client via l'API
     */
    public String createClient(ClientDTO clientDTO) {
        try {
            logger.info("Création d'un nouveau client via l'API");
            // TODO: Implémenter la création via clientRestService
            return "/pages/clients/list?faces-redirect=true";
        } catch (Exception e) {
            logger.severe("Erreur lors de la création du client: " + e.getMessage());
            return null;
        }
    }

    /**
     * Met à jour un client via l'API
     */
    public String updateClient(ClientDTO clientDTO) {
        try {
            logger.info("Mise à jour du client via l'API: " + clientDTO.getId());
            // TODO: Implémenter la mise à jour via clientRestService
            return "/pages/clients/list?faces-redirect=true";
        } catch (Exception e) {
            logger.severe("Erreur lors de la mise à jour du client: " + e.getMessage());
            return null;
        }
    }

    /**
     * Supprime un client via l'API
     */
    public String deleteClient(Long clientId) {
        try {
            logger.info("Suppression du client via l'API: " + clientId);
            // TODO: Implémenter la suppression via clientRestService
            return "/pages/clients/list?faces-redirect=true";
        } catch (Exception e) {
            logger.severe("Erreur lors de la suppression du client: " + e.getMessage());
            return null;
        }
    }
}
