export type VoorstelCategorie =
  | "ui"
  | "functionaliteit"
  | "api_mcp"
  | "data"
  | "integratie"
  | "andere";

export type VoorstelStatus = "open" | "in_behandeling" | "gedaan" | "afgewezen";
export type VoorstelPrioriteit = "hoog" | "midden" | "laag";

export interface Verbetervoorstel {
  id: string;
  titel: string;
  omschrijving: string;
  categorie: VoorstelCategorie;
  prioriteit: VoorstelPrioriteit;
  status: VoorstelStatus;
  technischeDetails?: string;
  acceptatiecriteria?: string;
  datum: string;
  aangepast: string;
}

export const categorieLabels: Record<VoorstelCategorie, string> = {
  ui: "UI / UX",
  functionaliteit: "Functionaliteit",
  api_mcp: "API / MCP",
  data: "Data & tarieven",
  integratie: "Integratie",
  andere: "Andere",
};

export const statusLabels: Record<VoorstelStatus, string> = {
  open: "Open",
  in_behandeling: "In behandeling",
  gedaan: "Gedaan",
  afgewezen: "Afgewezen",
};

export const prioriteitLabels: Record<VoorstelPrioriteit, string> = {
  hoog: "Hoog",
  midden: "Midden",
  laag: "Laag",
};

export const PRIORITEIT_VOLGORDE: Record<VoorstelPrioriteit, number> = {
  hoog: 0,
  midden: 1,
  laag: 2,
};

export const PRIORITEIT_STIJL: Record<VoorstelPrioriteit, string> = {
  hoog: "bg-red-50 text-red-700 border-red-200",
  midden: "bg-amber-50 text-amber-700 border-amber-200",
  laag: "bg-slate-100 text-slate-600 border-slate-200",
};

export const STATUS_STIJL: Record<VoorstelStatus, string> = {
  open: "bg-blue-50 text-blue-700 border-blue-200",
  in_behandeling: "bg-amber-50 text-amber-700 border-amber-200",
  gedaan: "bg-emerald-50 text-emerald-700 border-emerald-200",
  afgewezen: "bg-slate-100 text-slate-500 border-slate-200",
};

export const CATEGORIE_STIJL: Record<VoorstelCategorie, string> = {
  ui: "bg-violet-50 text-violet-700",
  functionaliteit: "bg-indigo-50 text-indigo-700",
  api_mcp: "bg-sky-50 text-sky-700",
  data: "bg-teal-50 text-teal-700",
  integratie: "bg-rose-50 text-rose-700",
  andere: "bg-slate-100 text-slate-600",
};

export const PRIORITEITEN: VoorstelPrioriteit[] = ["hoog", "midden", "laag"];
export const STATUSSEN: VoorstelStatus[] = ["open", "in_behandeling", "gedaan", "afgewezen"];
export const CATEGORIEEN: VoorstelCategorie[] = [
  "ui",
  "functionaliteit",
  "api_mcp",
  "data",
  "integratie",
  "andere",
];

export function sorteerVerbetervoorstellen(lijst: Verbetervoorstel[]): Verbetervoorstel[] {
  return [...lijst].sort((a, b) => {
    const prio = PRIORITEIT_VOLGORDE[a.prioriteit] - PRIORITEIT_VOLGORDE[b.prioriteit];
    return prio !== 0 ? prio : b.datum.localeCompare(a.datum);
  });
}

export function genereerId(): string {
  return `vv-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`;
}

export function exporteerAlsPrompt(voorstellen: Verbetervoorstel[]): string {
  const open = sorteerVerbetervoorstellen(
    voorstellen.filter((v) => v.status !== "gedaan" && v.status !== "afgewezen")
  );
  if (open.length === 0) return "Geen openstaande verbetervoorstellen.";

  const regels = open.map((v, i) => {
    const lines = [
      `${i + 1}. [${prioriteitLabels[v.prioriteit].toUpperCase()}] ${v.titel}`,
      `   Categorie: ${categorieLabels[v.categorie]} | Status: ${statusLabels[v.status]}`,
      `   ${v.omschrijving}`,
    ];
    if (v.technischeDetails) lines.push(`   Technisch: ${v.technischeDetails}`);
    if (v.acceptatiecriteria) lines.push(`   Klaar als: ${v.acceptatiecriteria}`);
    return lines.join("\n");
  });

  return [
    `# Verbetervoorstellen Notary.AI — ${new Date().toLocaleDateString("nl-BE")}`,
    ``,
    `${open.length} openstaande verzoek${open.length === 1 ? "" : "en"}, gesorteerd op prioriteit:`,
    ``,
    ...regels,
    ``,
    `Implementeer deze verbeteringen in volgorde van prioriteit. Commit elke wijziging afzonderlijk met een duidelijke commit-boodschap.`,
  ].join("\n");
}
