package com.gbcm.client.service;

import java.util.Map;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import org.eclipse.microprofile.rest.client.inject.RegisterRestClient;
import org.eclipse.microprofile.rest.client.inject.RestClient;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.*;
import jakarta.ws.rs.core.MediaType;

@ApplicationScoped
public class DashboardRestService {

    private static final Logger logger = LoggerFactory.getLogger(DashboardRestService.class);

    @Inject
    @RestClient
    private DashboardRestClient dashboardRestClient;

    public Map<String, Object> getDashboardMetrics() {
        try {
            logger.info("Appel API pour récupérer les métriques dashboard");
            // Utilise l'endpoint /dev pour éviter les problèmes d'auth temporaires si le
            // client n'est pas loggé ou auth bypass
            // Si DashboardResource a /dev, utilisons-le. J'ai vu getDashboardMetricsForDev
            // sur /dev.
            return dashboardRestClient.getDashboardMetricsDev();
        } catch (Exception e) {
            logger.error("Erreur lors de l'appel API dashboard metrics: " + e.getMessage(), e);
            throw new RuntimeException("Impossible de récupérer les métriques", e);
        }
    }

    @RegisterRestClient
    @Path("/dashboard")
    @Produces(MediaType.APPLICATION_JSON)
    @Consumes(MediaType.APPLICATION_JSON)
    public interface DashboardRestClient {

        @GET
        @Path("/dev")
        Map<String, Object> getDashboardMetricsDev();
    }
}
