/**
 * Cumas-Filter-Codes.
 * Quelle: physische Filter-Code-Sheets aus dem Büro (siehe Screenshots vom 2026-05).
 *
 * WICHTIG — Server-Side vs. Client-Side:
 * Die Cumas-API listet im IriTemplate offiziell nur eine kleine Untermenge der
 * Felder als filterbar (firma, plz, strasse, email, *_nr, idkdnr für Business;
 * evbnr/rechnr/idkdnr/its_business_data/order_private_shop/rechdatum für EVBs;
 * invoice_number/email/client_name/reg_datetime für Orders).
 *
 * Die Codes hier (Briefstatus, KZK, Kundengröße, Status-Detail) tauchen NICHT
 * im IriTemplate auf — wir filtern damit deshalb CLIENT-SEITIG nach dem Fetch.
 * Quelle für die Werte: physische Filter-Sheets aus dem Büro.
 *
 * Top-Level-Klassifikation (`its_ksm`) wird dynamisch via `/api/crm/facets`
 * erfasst — keine hardcoded Liste mehr, da real ≥7 Werte (ITS, SITS, AITS,
 * KSM, SKSM, AKSM, ASPA, ...) existieren und wachsen können.
 */

// ─────────────────────────────────────────────────────────────────────────────
// Workspace-Slug (interne workspaces-Tabelle)
// ─────────────────────────────────────────────────────────────────────────────

/**
 * Top-Level-Workspace entsprechend `workspaces.slug` aus der lokalen DB.
 * Im Plugin-Build ist der Slug ein frei wählbarer String pro Integrator —
 * der frühere Mailforge-Live-Tipp (its/ksm/spartarif) ist obsolet.
 */
export type BrandSlug = string;

// ─────────────────────────────────────────────────────────────────────────────
// Briefstatus (Zoll 2) — bestimmt ob Kunde überhaupt angeschrieben werden DARF
// ─────────────────────────────────────────────────────────────────────────────

export const BRIEFSTATUS = {
  '11': 'wird angeschrieben',
  '10': 'wird NICHT MEHR angeschrieben',
  '13': 'Unterkunde',
  '12': 'Adresse unklar',
} as const;
export type BriefstatusCode = keyof typeof BRIEFSTATUS;

/** Default-Filter für Marketing-Versand: nur "wird angeschrieben". */
export const DEFAULT_BRIEFSTATUS: BriefstatusCode[] = ['11'];

// ─────────────────────────────────────────────────────────────────────────────
// KZK 2 — Status der Korrespondenz/Kundenbindung
// ─────────────────────────────────────────────────────────────────────────────

export const KZK_STATUS = {
  '20': 'positiv – aktiv (20)',
  '21': 'positiv – aktiv (21)',
  '22': 'positiv – aktiv (22)',
  '12': 'negativ (12)',
  '13': 'negativ (13)',
  '14': 'negativ (14)',
  '05': 'nicht bekannt (05)',
  '15': 'nicht bekannt (15)',
} as const;
export type KzkStatusCode = keyof typeof KZK_STATUS;

// ─────────────────────────────────────────────────────────────────────────────
// 70er-Staten — Kundengröße
// ─────────────────────────────────────────────────────────────────────────────

export const KUNDENGROESSE = {
  '70': 'Einzelfahrzeug',
  '71': 'Klein-Flotte (2–5)',
  '72': 'Mittlere Flotte (6–20)',
  '73': 'Große Flotte (21–50)',
  '74': 'Großkunde (51–200)',
  '75': 'Konzern (>200)',
} as const;
export type KundengroesseCode = keyof typeof KUNDENGROESSE;

// ─────────────────────────────────────────────────────────────────────────────
// Status-Codes 0x–9x (high-level Geschäftsstatus)
// ─────────────────────────────────────────────────────────────────────────────

export const STATUS_GROUPS = {
  '0x': 'nicht (mehr) im Geschäft',
  '5x': 'Hausvers. / Mitbewerb',
  '6x': 'kein Interesse',
  '7x': 'Kunden (siehe Kundengröße)',
  '8x': 'Negativkunde / Schlechter Zahler',
  '9x': 'aufgelöst / Akquisition',
} as const;
export type StatusGroup = keyof typeof STATUS_GROUPS;

/** Detaillierte Status-Codes (50–99) wie im physischen Sheet. */
export const STATUS_DETAIL = {
  // 5x — Bestand/Mitbewerb
  '50': 'Hausversicherung',
  '51': 'bei Mitbewerb',
  // 6x — Kein Interesse
  '60': 'kein Interesse',
  '61': 'kein Interesse — explizit abgelehnt',
  // 7x — Kunden (auch in KUNDENGROESSE)
  '70': 'Kunde – Einzelfahrzeug',
  '71': 'Kunde – Klein-Flotte',
  '72': 'Kunde – Mittlere Flotte',
  '73': 'Kunde – Große Flotte',
  '74': 'Kunde – Großkunde',
  '75': 'Kunde – Konzern',
  // 8x — Negativ
  '80': 'Schlechter Zahler',
  '81': 'Inkasso',
  '82': 'Klage',
  '83': 'Abmahnaktion – Mandat',
  '84': 'Abmahnaktion – Webpage',
  // 9x — Akquise / Aufgelöst
  '90': 'Akquise – Erstkontakt',
  '91': 'Akquise – Termin',
  '92': 'Akquise – Angebot raus',
  '93': 'Akquise – Nachfass',
  '99': 'Aufgelöst',
} as const;
export type StatusDetailCode = keyof typeof STATUS_DETAIL;

/** Codes, die für Marketing-Versand AUSGESCHLOSSEN werden sollten (Default). */
export const NEGATIVE_STATUS_CODES: StatusDetailCode[] = [
  '60', '61',           // kein Interesse
  '80', '81', '82',     // schlechter Zahler / Inkasso / Klage
  '83', '84',           // Abmahnaktion
  '99',                 // aufgelöst
];

// ─────────────────────────────────────────────────────────────────────────────
// Akquise-Codes (Sammelbegriff für die 9x-Codes + Spezialfälle)
// ─────────────────────────────────────────────────────────────────────────────

export const AKQUISE_CODES = {
  '90': 'Erstkontakt',
  '91': 'Termin vereinbart',
  '92': 'Angebot versendet',
  '93': 'Nachfass nötig',
  '94': 'Stillschweigend abgelehnt',
} as const;
export type AkquiseCode = keyof typeof AKQUISE_CODES;

// ─────────────────────────────────────────────────────────────────────────────
// Helpers
// ─────────────────────────────────────────────────────────────────────────────

/** Liefert lesbares Label für einen Status-Code (Detail oder Gruppe als Fallback). */
export function statusLabel(code: string): string {
  if (code in STATUS_DETAIL) return STATUS_DETAIL[code as StatusDetailCode];
  const group = (code[0] + 'x') as StatusGroup;
  return STATUS_GROUPS[group] ?? code;
}

/** Alle Codes in einer Range (z.B. "7x" → ['70','71',…,'79']). */
export function codesInGroup(group: StatusGroup): string[] {
  const prefix = group[0];
  return Array.from({ length: 10 }, (_, i) => `${prefix}${i}`);
}

// ─────────────────────────────────────────────────────────────────────────────
// EVB-Typen
// ─────────────────────────────────────────────────────────────────────────────

export const EVB_TYPE_LABELS = {
  KZK: 'Kurzzeitkennzeichen (KZK)',
  KZKA: 'KZK-Aktivierung (Anhänger)',
} as const;
export type EvbType = keyof typeof EVB_TYPE_LABELS;
