"use server";

import { auth } from "@/config/auth";
import { PrismaCampaignsRepository } from "@/modules/campaigns/repositories/prisma-campaigns-repository";
import { PrismaCampaignLogsRepository } from "@/modules/campaigns/repositories/prisma-campaign-logs-repository";
import { PrismaEmailEventsRepository } from "@/modules/ses-webhooks/repositories/prisma-email-events-repository";
import {
  GetDashboardAnalyticsUseCase,
  DashboardPeriod,
  DashboardAnalyticsResponse,
} from "@/modules/campaigns/use-cases/get-dashboard-analytics-use-case";

export async function getDashboardAnalyticsAction(
  period: DashboardPeriod = "30D"
): Promise<DashboardAnalyticsResponse | null> {
  const session = await auth();

  if (!session?.user?.id) {
    return null;
  }

  const useCase = new GetDashboardAnalyticsUseCase(
    new PrismaCampaignsRepository(),
    new PrismaCampaignLogsRepository(),
    new PrismaEmailEventsRepository()
  );

  return useCase.execute({
    userId: session.user.id,
    period,
  });
}
