'use server';

import {
  MetricsService,
  WeeklyMetricsOverview,
  VelocityTrend,
} from '@/services/analytics/metrics';
import { getToday } from '@/lib/date-utils';
import { getServerSession } from 'next-auth';
import { authOptions } from '@/lib/auth';

/**
 * Récupère les métriques hebdomadaires pour une date donnée
 */
export async function getWeeklyMetrics(date?: Date): Promise<{
  success: boolean;
  data?: WeeklyMetricsOverview;
  error?: string;
}> {
  try {
    // Récupérer l'utilisateur connecté
    const session = await getServerSession(authOptions);
    if (!session?.user?.id) {
      return {
        success: false,
        error: 'Utilisateur non authentifié',
      };
    }

    const targetDate = date || getToday();
    const metrics = await MetricsService.getWeeklyMetrics(
      session.user.id,
      targetDate
    );

    return {
      success: true,
      data: metrics,
    };
  } catch (error) {
    console.error('Error fetching weekly metrics:', error);
    return {
      success: false,
      error:
        error instanceof Error
          ? error.message
          : 'Failed to fetch weekly metrics',
    };
  }
}

/**
 * Récupère les tendances de vélocité sur plusieurs semaines
 */
export async function getVelocityTrends(weeksBack: number = 4): Promise<{
  success: boolean;
  data?: VelocityTrend[];
  error?: string;
}> {
  try {
    // Récupérer l'utilisateur connecté
    const session = await getServerSession(authOptions);
    if (!session?.user?.id) {
      return {
        success: false,
        error: 'Utilisateur non authentifié',
      };
    }

    if (weeksBack < 1 || weeksBack > 12) {
      return {
        success: false,
        error: 'Invalid weeksBack parameter (must be 1-12)',
      };
    }

    const trends = await MetricsService.getVelocityTrends(
      session.user.id,
      weeksBack
    );

    return {
      success: true,
      data: trends,
    };
  } catch (error) {
    console.error('Error fetching velocity trends:', error);
    return {
      success: false,
      error:
        error instanceof Error
          ? error.message
          : 'Failed to fetch velocity trends',
    };
  }
}
