package dev.lions.unionflow.server.api.service.dashboard;

import dev.lions.unionflow.server.api.dto.dashboard.DashboardDataResponse;
import dev.lions.unionflow.server.api.dto.dashboard.DashboardStatsResponse;
import dev.lions.unionflow.server.api.dto.dashboard.RecentActivityResponse;
import dev.lions.unionflow.server.api.dto.dashboard.UpcomingEventResponse;

import java.util.List;

/**
 * Interface de service pour la gestion des données du dashboard
 * 
 * <p>Cette interface définit le contrat pour récupérer les données du dashboard,
 * incluant les statistiques, activités récentes et événements à venir.
 * 
 * @author UnionFlow Team
 * @version 1.0
 * @since 2025-01-15
 */
public interface DashboardService {

    /**
     * Récupère toutes les données du dashboard pour une organisation et un utilisateur
     * 
     * @param organizationId L'identifiant de l'organisation
     * @param userId L'identifiant de l'utilisateur
     * @return Les données complètes du dashboard
     */
    DashboardDataResponse getDashboardData(String organizationId, String userId);

    /**
     * Récupère uniquement les statistiques du dashboard
     * 
     * @param organizationId L'identifiant de l'organisation
     * @param userId L'identifiant de l'utilisateur
     * @return Les statistiques du dashboard
     */
    DashboardStatsResponse getDashboardStats(String organizationId, String userId);

    /**
     * Récupère les activités récentes
     * 
     * @param organizationId L'identifiant de l'organisation
     * @param userId L'identifiant de l'utilisateur
     * @param limit Le nombre maximum d'activités à retourner
     * @return La liste des activités récentes
     */
    List<RecentActivityResponse> getRecentActivities(String organizationId, String userId, int limit);

    /**
     * Récupère les événements à venir
     * 
     * @param organizationId L'identifiant de l'organisation
     * @param userId L'identifiant de l'utilisateur
     * @param limit Le nombre maximum d'événements à retourner
     * @return La liste des événements à venir
     */
    List<UpcomingEventResponse> getUpcomingEvents(String organizationId, String userId, int limit);
}
