import { NextRequest } from "next/server";

import { env } from "@/config/env";
import { ResponseHelper } from "@/shared/infra/http/response-helper";
import { BootstrapSesInfraUseCase } from "@/modules/domains/use-cases/bootstrap-ses-infra-use-case";
import { SesInfraBootstrapperImpl } from "@/modules/domains/use-cases/ses-infra-bootstrapper-impl";

/** Provisiona (de forma idempotente) o Configuration Set + tópico SNS + event destination
 * do SES. Protegido por um segredo compartilhado, já que não há conceito de admin/role
 * na aplicação hoje — pensado para ser rodado uma vez por ambiente/região. */
export async function POST(request: NextRequest) {
  const secret = request.headers.get("x-admin-secret");

  if (!env.adminBootstrapSecret || secret !== env.adminBootstrapSecret) {
    return ResponseHelper.error("Não autorizado", 401);
  }

  if (!env.appBaseUrl) {
    return ResponseHelper.error("APP_BASE_URL não configurada", 400);
  }

  const useCase = new BootstrapSesInfraUseCase(new SesInfraBootstrapperImpl());
  const result = await useCase.execute({
    configurationSetName: env.sesConfigurationSet,
    snsTopicName: env.sesSnsTopicName,
    webhookEndpoint: `${env.appBaseUrl}/api/webhooks/ses`,
  });

  return ResponseHelper.success(result);
}
