import { NextResponse } from "next/server";
import { getDbPool } from "@/db";
import { defaultCapturePolicy, getCapturePolicy } from "@/lib/capture-policy";
import { getPortalContext } from "@/lib/portal-context";

export const dynamic = "force-dynamic";

async function clientContext() {
  const portal = await getPortalContext();
  if (!portal) return null;
  return { ...portal, db: getDbPool() };
}

export async function GET() {
  const context = await clientContext();
  if (!context) return NextResponse.json({ error: "Faça login no portal do cliente." }, { status: 401 });
  try {
    return NextResponse.json({ policy: await getCapturePolicy(context.tenantId), canManage: context.session.role === "client_admin" || context.isSupport, isSupport: context.isSupport });
  } catch (error) {
    console.error("Erro ao carregar política de captura", error);
    return NextResponse.json({ error: "A configuração de captura ainda não foi instalada.", hint: "Execute a migration 014_tenant_capture_policies.sql." }, { status: 503 });
  }
}

export async function PUT(request: Request) {
  const context = await clientContext();
  if (!context) return NextResponse.json({ error: "Faça login no portal do cliente." }, { status: 401 });
  if (context.session.role !== "client_admin" && !context.isSupport) return NextResponse.json({ error: "Somente o administrador do cliente pode alterar as regras de captura." }, { status: 403 });
  try {
    const body = await request.json() as Record<string, unknown>;
    const qualityAction = body.qualityAction === "retriage" ? "retriage" : defaultCapturePolicy.qualityAction;
    const plateUnreadableAction = body.plateUnreadableAction === "retriage" ? "retriage" : defaultCapturePolicy.plateUnreadableAction;
    const plateMismatchAction = body.plateMismatchAction === "block_approval" ? "block_approval" : defaultCapturePolicy.plateMismatchAction;
    await context.db.execute(
      `INSERT INTO tenant_capture_policies (tenant_id, quality_action, plate_unreadable_action, plate_mismatch_action, updated_by)
       VALUES (?, ?, ?, ?, ?)
       ON DUPLICATE KEY UPDATE quality_action = VALUES(quality_action), plate_unreadable_action = VALUES(plate_unreadable_action), plate_mismatch_action = VALUES(plate_mismatch_action), updated_by = VALUES(updated_by), updated_at = NOW()`,
      [context.tenantId, qualityAction, plateUnreadableAction, plateMismatchAction, context.session.name],
    );
    return NextResponse.json({ message: "Critérios de captura atualizados.", policy: { qualityAction, plateUnreadableAction, plateMismatchAction } });
  } catch (error) {
    console.error("Erro ao atualizar política de captura", error);
    return NextResponse.json({ error: "Não foi possível salvar os critérios de captura.", hint: "Verifique se a migration 014_tenant_capture_policies.sql foi executada." }, { status: 500 });
  }
}
