import { getDbPool } from "@/db";

export type CapturePolicy = {
  qualityAction: "human_review" | "retriage";
  plateUnreadableAction: "human_review" | "retriage";
  plateMismatchAction: "human_review" | "block_approval";
};

export const defaultCapturePolicy: CapturePolicy = {
  qualityAction: "human_review",
  plateUnreadableAction: "human_review",
  plateMismatchAction: "human_review",
};

function qualityAction(value: unknown): CapturePolicy["qualityAction"] {
  return value === "retriage" ? "retriage" : "human_review";
}

function mismatchAction(value: unknown): CapturePolicy["plateMismatchAction"] {
  return value === "block_approval" ? "block_approval" : "human_review";
}

export async function getCapturePolicy(tenantId: string): Promise<CapturePolicy> {
  const db = getDbPool();
  try {
    const [rows] = await db.execute(
      "SELECT quality_action, plate_unreadable_action, plate_mismatch_action FROM tenant_capture_policies WHERE tenant_id = ? LIMIT 1",
      [tenantId],
    );
    const row = (rows as Record<string, unknown>[])[0];
    if (!row) return defaultCapturePolicy;
    return {
      qualityAction: qualityAction(row.quality_action),
      plateUnreadableAction: qualityAction(row.plate_unreadable_action),
      plateMismatchAction: mismatchAction(row.plate_mismatch_action),
    };
  } catch (error) {
    if ((error as { code?: string }).code === "ER_NO_SUCH_TABLE") return defaultCapturePolicy;
    throw error;
  }
}
