import { auth } from "@/config/auth";
import { CampaignsModuleView } from "@/modules/campaigns/components/campaigns-module-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 {
  GetCampaignsSummaryByUserUseCase,
  CampaignsSummary,
} from "@/modules/campaigns/use-cases/get-campaigns-summary-by-user-use-case";

export const dynamic = "force-dynamic";

const EMPTY_SUMMARY: CampaignsSummary = { campaignsCount: 0, total: 0, success: 0, failed: 0, pending: 0 };

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

  const [{ campaigns }, { summary }] = session?.user?.id
    ? await Promise.all([
        new GetCampaignsByUserUseCase(new PrismaCampaignsRepository()).execute({
          userId: session.user.id,
        }),
        new GetCampaignsSummaryByUserUseCase(
          new PrismaCampaignsRepository(),
          new PrismaCampaignLogsRepository()
        ).execute({ userId: session.user.id }),
      ])
    : [{ campaigns: [] }, { summary: EMPTY_SUMMARY }];

  return <CampaignsModuleView campaigns={campaigns} summary={summary} />;
}
