import { auth } from "@/config/auth";
import { OverviewDashboardView } from "@/modules/campaigns/components/overview-dashboard-view";
import { PrismaCampaignsRepository } from "@/modules/campaigns/repositories/prisma-campaigns-repository";
import { PrismaCampaignLogsRepository } from "@/modules/campaigns/repositories/prisma-campaign-logs-repository";
import { GetCampaignsByUserUseCase } from "@/modules/campaigns/use-cases/get-campaigns-by-user-use-case";
import { GetDashboardAnalyticsUseCase } from "@/modules/campaigns/use-cases/get-dashboard-analytics-use-case";
import { PrismaEmailEventsRepository } from "@/modules/ses-webhooks/repositories/prisma-email-events-repository";

export const dynamic = "force-dynamic";

export default async function HomePage() {
  const session = await auth();

  const campaignsRepo = new PrismaCampaignsRepository();
  const campaignLogsRepo = new PrismaCampaignLogsRepository();

  const [{ campaigns }, initialAnalytics] = session?.user?.id
    ? await Promise.all([
        new GetCampaignsByUserUseCase(campaignsRepo).execute({
          userId: session.user.id,
        }),
        new GetDashboardAnalyticsUseCase(
          campaignsRepo,
          campaignLogsRepo,
          new PrismaEmailEventsRepository()
        ).execute({
          userId: session.user.id,
          period: "30D",
        }),
      ])
    : [{ campaigns: [] }, null];

  return (
    <OverviewDashboardView
      campaigns={campaigns}
      initialAnalytics={initialAnalytics}
      user={session?.user}
    />
  );
}
