'use server';

import { JiraAnalyticsService } from '@/services/integrations/jira/analytics';
import { userPreferencesService } from '@/services/core/user-preferences';
import { JiraAnalytics } from '@/lib/types';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';

export type JiraAnalyticsResult = {
  success: boolean;
  data?: JiraAnalytics;
  error?: string;
};

/**
 * Server Action pour récupérer les analytics Jira du projet configuré
 */
export async function getJiraAnalytics(
  forceRefresh = false
): Promise<JiraAnalyticsResult> {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user?.id) {
      return { success: false, error: 'Non authentifié' };
    }

    // Récupérer la config Jira depuis la base de données
    const jiraConfig = await userPreferencesService.getJiraConfig(
      session.user.id
    );

    if (
      !jiraConfig.enabled ||
      !jiraConfig.baseUrl ||
      !jiraConfig.email ||
      !jiraConfig.apiToken
    ) {
      return {
        success: false,
        error:
          'Configuration Jira manquante. Configurez Jira dans les paramètres.',
      };
    }

    if (!jiraConfig.projectKey) {
      return {
        success: false,
        error:
          'Aucun projet configuré pour les analytics. Configurez un projet dans les paramètres Jira.',
      };
    }

    // Créer le service d'analytics
    const analyticsService = new JiraAnalyticsService({
      enabled: jiraConfig.enabled,
      baseUrl: jiraConfig.baseUrl,
      email: jiraConfig.email,
      apiToken: jiraConfig.apiToken,
      projectKey: jiraConfig.projectKey,
    });

    // Récupérer les analytics (avec cache ou actualisation forcée)
    const analytics = await analyticsService.getProjectAnalytics(forceRefresh);

    return {
      success: true,
      data: analytics,
    };
  } catch (error) {
    console.error('❌ Erreur lors du calcul des analytics Jira:', error);

    return {
      success: false,
      error:
        error instanceof Error
          ? error.message
          : 'Erreur lors du calcul des analytics',
    };
  }
}
