// ============================================================
// LSPD — Stammdaten & Beispieldaten (alles fiktiv, GTA-RP)
// ============================================================

// ---- Ränge / Dienstgrade (mit Farbe) ----
const RANKS = {
  chief:           { label: 'Chief of Police',           color: '#FF4F6C', tier: 5 },
  asst_chief:      { label: 'Assistant Chief',           color: '#CC2233', tier: 5 },
  deputy_chief:    { label: 'Deputy Chief',              color: '#E5384E', tier: 5 },
  director_legal:  { label: 'Director of Legal Affairs', color: '#A78BFA', tier: 5 },
  commander:       { label: 'Commander',                 color: '#F59E0B', tier: 4 },
  captain:       { label: 'Captain',             color: '#E0A33A', tier: 4 },
  lieutenant:    { label: 'Lieutenant',          color: '#3B82F6', tier: 3 },
  sergeant_ii:   { label: 'Sergeant II',         color: '#0EA5E9', tier: 3 },
  sergeant_i:    { label: 'Sergeant I',          color: '#0EA5E9', tier: 3 },
  sergeant:      { label: 'Sergeant',            color: '#0EA5E9', tier: 3 },
  detective:   { label: 'Detective',           color: '#A78BFA', tier: 3 },
  officer:     { label: 'Police Officer',      color: '#22C55E', tier: 2 },
  kadett:      { label: 'Kadett',              color: '#8899AA', tier: 1 },
};

// ---- Status ----
const STATUS = {
  AKTIV:        { label: 'Aktiv',         color: '#22C55E' },
  PAUSE:        { label: 'Pause/Aussatz', color: '#F59E0B' },
  BEURLAUBT:    { label: 'Beurlaubt',     color: '#0EA5E9' },
  SUSPENDIERT:  { label: 'Suspendiert',   color: '#FF4F6C' },
  AUSBILDUNG:   { label: 'In Ausbildung', color: '#A78BFA' },
  ENTLASSEN:    { label: 'Entlassen',     color: '#8899AA' },
  BLACKLIST:    { label: 'Blacklist',     color: '#CC2233' },
  SONSTIGES:    { label: 'Sonstiges',     color: '#64748B' },
};

const DEPARTMENTS = ['Streifendienst', 'Kriminalpolizei (CID)', 'SWAT', 'Verkehrspolizei', 'Ausbildung'];

// avatar helper – deterministic monogram
function avatarFor(name) {
  return name.replace(/\[.*?\]/g, '').trim().split(' ').map(p => p[0]).slice(0, 2).join('').toUpperCase();
}

// ---- Mitarbeiter (Beamte) ----
const MEMBERS = [
  { id: 1,  name: 'Frank Mercer',     dn: 'LSPD-001', rank: 'chief',      dept: 'Verwaltung',           status: 'AKTIV',       since: '14.01.2024', discord: 'f.mercer#0001',  hours: 512, ausb: 11, fach: 5 },
  { id: 2,  name: 'Diana Castillo',   dn: 'LSPD-002', rank: 'asst_chief', dept: 'Kriminalpolizei (CID)',status: 'AKTIV',       since: '21.01.2024', discord: 'd.castillo#7720',hours: 468, ausb: 10, fach: 5 },
  { id: 3,  name: 'Marcus Holt',      dn: 'LSPD-007', rank: 'commander',  dept: 'SWAT',                 status: 'AKTIV',       since: '03.02.2024', discord: 'mholt#1144',     hours: 421, ausb: 9,  fach: 4 },
  { id: 4,  name: 'Erika Lindqvist',  dn: 'LSPD-011', rank: 'captain',    dept: 'Streifendienst',       status: 'AKTIV',       since: '19.02.2024', discord: 'e.lind#5560',    hours: 389, ausb: 8,  fach: 4 },
  { id: 5,  name: 'Raymond Park',     dn: 'LSPD-014', rank: 'captain',    dept: 'Verkehrspolizei',      status: 'PAUSE',       since: '02.03.2024', discord: 'rpark#0099',     hours: 344, ausb: 7,  fach: 3 },
  { id: 6,  name: 'Lena Brooks',      dn: 'LSPD-018', rank: 'lieutenant', dept: 'Kriminalpolizei (CID)',status: 'AKTIV',       since: '11.03.2024', discord: 'lbrooks#3321',   hours: 312, ausb: 6,  fach: 3 },
  { id: 7,  name: 'Tyrone Banks',     dn: 'LSPD-022', rank: 'sergeant',   dept: 'Streifendienst',       status: 'AKTIV',       since: '27.03.2024', discord: 'tbanks#8812',    hours: 281, ausb: 5,  fach: 2 },
  { id: 8,  name: 'Mia Cordova',      dn: 'LSPD-025', rank: 'detective',  dept: 'Kriminalpolizei (CID)',status: 'AKTIV',       since: '04.04.2024', discord: 'm.cordova#4410', hours: 269, ausb: 5,  fach: 3 },
  { id: 9,  name: 'David Krause',     dn: 'LSPD-029', rank: 'lieutenant', dept: 'SWAT',                 status: 'BEURLAUBT',   since: '18.04.2024', discord: 'dkrause#2200',   hours: 248, ausb: 6,  fach: 2 },
  { id: 10, name: 'Carla Mendes',     dn: 'LSPD-033', rank: 'officer',    dept: 'Streifendienst',       status: 'AKTIV',       since: '02.05.2024', discord: 'carlam#6677',    hours: 197, ausb: 3,  fach: 1 },
  { id: 11, name: 'Tim Brandt',       dn: 'LSPD-037', rank: 'officer',    dept: 'Verkehrspolizei',      status: 'AUSBILDUNG',  since: '20.05.2024', discord: 'tbrandt#1133',   hours: 106, ausb: 2,  fach: 0 },
  { id: 12, name: 'Sophie Lang',      dn: 'LSPD-041', rank: 'kadett',     dept: 'Ausbildung',           status: 'AUSBILDUNG',  since: '08.06.2024', discord: 'sophie.l#9090',  hours: 58,  ausb: 1,  fach: 0 },
  { id: 13, name: 'Igor Petrow',      dn: 'LSPD-016', rank: 'detective',  dept: 'Kriminalpolizei (CID)',status: 'SUSPENDIERT', since: '06.03.2024', discord: 'ipetrow#7474',   hours: 240, ausb: 5,  fach: 2 },
  { id: 14, name: 'Nadia Khan',       dn: 'LSPD-044', rank: 'officer',    dept: 'Streifendienst',       status: 'AKTIV',       since: '15.06.2024', discord: 'nkhan#5511',     hours: 152, ausb: 3,  fach: 1 },
  { id: 15, name: 'Ben Hofer',        dn: 'LSPD-009', rank: 'sergeant',   dept: 'Streifendienst',       status: 'ENTLASSEN',   since: '24.02.2024', discord: 'bhofer#0303',    hours: 178, ausb: 3,  fach: 1 },
];

const LEADERSHIP = MEMBERS.filter(m => RANKS[m.rank].tier >= 4 && m.status === 'AKTIV');

// ---- Fahndungen (BOLO / Wanted) — ersetzt Versicherungen-Kanban ----
const FAHNDUNGEN = [
  { id: 'FA-2041', name: 'Vincent Calloway', type: 'Haftbefehl',     insured: 3, from: '12.05.2026', to: '12.06.2026', state: 'aktiv',      grund: 'Bewaffneter Raubüberfall' },
  { id: 'FA-2038', name: 'Dimitri Sokolov',  type: 'BOLO',           insured: 1, from: '08.05.2026', to: '08.06.2026', state: 'aktiv',      grund: 'Fahrerflucht' },
  { id: 'FA-2033', name: 'Marlon Reeves',    type: 'Vorladung',      insured: 1, from: '01.05.2026', to: '04.06.2026', state: 'faellig',    grund: 'Zeugenvernehmung' },
  { id: 'FA-2029', name: 'Gang: Vagos Süd',  type: 'Sammelfahndung', insured: 5, from: '28.04.2026', to: '05.06.2026', state: 'faellig',    grund: 'Drogenhandel' },
  { id: 'FA-2018', name: 'Eddie Tran',       type: 'Haftbefehl',     insured: 1, from: '02.04.2026', to: '28.05.2026', state: 'abgelaufen', grund: 'Körperverletzung' },
  { id: 'FA-2011', name: 'Konvoi Vespucci',  type: 'Sammelfahndung', insured: 4, from: '25.03.2026', to: '24.05.2026', state: 'abgelaufen', grund: 'Illegale Rennen' },
  { id: 'FA-2044', name: 'Nora Whitfield',   type: 'BOLO',           insured: 1, from: '20.05.2026', to: '20.06.2026', state: 'aktiv',      grund: 'Vermisst / Gefahr' },
  { id: 'FA-2046', name: 'Crew: Ballas',     type: 'Sammelfahndung', insured: 6, from: '24.05.2026', to: '24.06.2026', state: 'aktiv',      grund: 'Schießerei Davis' },
];

// ---- Dashboard KPIs ----
const KPIS = [
  { label: 'Mit Zielposition',     value: '34', sub: 'von 41 Beamten',     icon: 'Target',       tone: 'accent' },
  { label: 'Zielposition erfüllt', value: '19', sub: '56 % der Anwärter',  icon: 'CircleCheck',  tone: 'success' },
  { label: 'Ziel-Ränge',           value: '9',  sub: 'definierte Stufen',  icon: 'Layers',       tone: 'ink' },
  { label: 'Streifen im Dienst',   value: '12', sub: 'aktuell auf Patrol', icon: 'Car',          tone: 'ink' },
  { label: 'Ø Zugehörigkeit',      value: '6,4',sub: 'Monate',            icon: 'CalendarDays', tone: 'ink' },
  { label: 'Ø Ausbildungen',       value: '4,6',sub: 'pro Beamten',       icon: 'GraduationCap',tone: 'ink' },
  { label: 'Ø Zertifikate',        value: '2,1',sub: 'Spezialisierungen', icon: 'BadgeCheck',   tone: 'ink' },
  { label: 'Account Coverage',     value: '93 %',sub: 'Discord verknüpft', icon: 'ShieldCheck',  tone: 'success' },
  { label: 'Phone Coverage',       value: '88 %',sub: 'Nummer hinterlegt', icon: 'Phone',        tone: 'warning' },
  { label: 'Profilqualität',       value: '81 %',sub: 'vollständige Profile', icon: 'Gauge',     tone: 'accent' },
];

// ---- Charts ----
const STATUS_DONUT = [
  { name: 'Aktiv',        value: 41, fill: '#22C55E' },
  { name: 'Pause',        value: 6,  fill: '#F59E0B' },
  { name: 'Beurlaubt',    value: 3,  fill: '#0EA5E9' },
  { name: 'In Ausbildung',value: 5,  fill: '#A78BFA' },
];
const WARN_BARS = [
  { name: 'Stufe 0', value: 34, fill: '#22C55E' },
  { name: 'Stufe 1', value: 9,  fill: '#F59E0B' },
  { name: 'Stufe 2', value: 4,  fill: '#FF4F6C' },
  { name: 'Stufe 3', value: 1,  fill: '#CC2233' },
];
const TOP_POSITIONS = [
  { name: 'Police Officer', value: 14 },
  { name: 'Sergeant',       value: 8 },
  { name: 'Detective',      value: 7 },
  { name: 'Lieutenant',     value: 5 },
  { name: 'Captain',        value: 3 },
  { name: 'Commander',      value: 2 },
];
const TIMELINE_TYPES = [
  { name: 'Beförderung',  value: 38, fill: '#CC2233' },
  { name: 'Ausbildung',   value: 52, fill: '#F59E0B' },
  { name: 'Verwarnung',   value: 14, fill: '#FF4F6C' },
  { name: 'Belobigung',   value: 21, fill: '#22C55E' },
  { name: 'Sonstiges',    value: 9,  fill: '#8899AA' },
];
const TARGET_POSITIONS = [
  { rank: 'Officer',    anwaerter: 9,  erfuellt: 5 },
  { rank: 'Detective',  anwaerter: 6,  erfuellt: 3 },
  { rank: 'Sergeant',   anwaerter: 4,  erfuellt: 1 },
  { rank: 'Lieutenant', anwaerter: 8,  erfuellt: 6 },
  { rank: 'Captain',    anwaerter: 5,  erfuellt: 3 },
];
const WEEK_PERF = [
  { week: 'KW 18', std: 142, bef: 2 },
  { week: 'KW 19', std: 168, bef: 1 },
  { week: 'KW 20', std: 151, bef: 3 },
  { week: 'KW 21', std: 189, bef: 0 },
  { week: 'KW 22', std: 174, bef: 2 },
  { week: 'KW 23', std: 203, bef: 4 },
];

// ---- Theme-Templates fürs Studio ----
const THEME_TEMPLATES = [
  { id: 'staatlich',    name: 'Staatlich',     tag: 'Blau / Rot',    vars: { '--c-bg':'#0A1628','--c-bg2':'#0c1a2f','--c-card':'#16243c','--c-border':'#27395a','--c-accent':'#2A6FDB','--c-accent-soft':'rgba(42,111,219,0.16)','--c-signal':'#E5384E' }, swatch: ['#0A1628','#2A6FDB','#E5384E'] },
  { id: 'dark-red',     name: 'Dark Red',      tag: 'Klassik Rot',  vars: { '--c-bg':'#0A1628','--c-bg2':'#0c1a2f','--c-card':'#1C2A3A','--c-border':'#2A3A4A','--c-accent':'#CC2233','--c-accent-soft':'rgba(204,34,51,0.16)','--c-signal':'#FF4F6C' }, swatch: ['#0A1628','#CC2233','#FF4F6C'] },
  { id: 'lspd-gold',    name: 'LSPD Gold',     tag: 'Navy / Gold',   vars: { '--c-bg':'#0A1628','--c-bg2':'#0c1a2f','--c-card':'#16233a','--c-border':'#2A3A4A','--c-accent':'#E2B23A','--c-accent-soft':'rgba(226,178,58,0.16)','--c-signal':'#F5CF6B' }, swatch: ['#0A1628','#E2B23A','#F5CF6B'] },
  { id: 'dark-blue',    name: 'Dark Blue',     tag: 'Streife',       vars: { '--c-bg':'#091221','--c-bg2':'#0b1830','--c-card':'#152238','--c-border':'#243650','--c-accent':'#2A6FDB','--c-accent-soft':'rgba(42,111,219,0.18)','--c-signal':'#4F9CFF' }, swatch: ['#091221','#2A6FDB','#4F9CFF'] },
  { id: 'night-crystal',name: 'Night Crystal', tag: 'Schwarz / Weiß',vars: { '--c-bg':'#0B0B0D','--c-bg2':'#111114','--c-card':'#17171B','--c-border':'#2A2A30','--c-accent':'#E5E7EB','--c-accent-soft':'rgba(229,231,235,0.12)','--c-signal':'#FFFFFF' }, swatch: ['#0B0B0D','#E5E7EB','#FFFFFF'] },
  { id: 'onyx-saffron', name: 'Onyx Saffron',  tag: 'Dunkel / Safran',vars: { '--c-bg':'#100E0A','--c-bg2':'#16130c','--c-card':'#1E1A12','--c-border':'#332C1E','--c-accent':'#E0A33A','--c-accent-soft':'rgba(224,163,58,0.16)','--c-signal':'#F5C566' }, swatch: ['#100E0A','#E0A33A','#F5C566'] },
  { id: 'signal-halo',  name: 'Signal Halo',   tag: 'Magenta / Halo',vars: { '--c-bg':'#0E0913','--c-bg2':'#150c1c','--c-card':'#1C1226','--c-border':'#33203F','--c-accent':'#D6328C','--c-accent-soft':'rgba(214,50,140,0.18)','--c-signal':'#FF5FB0' }, swatch: ['#0E0913','#D6328C','#FF5FB0'] },
];

Object.assign(window, {
  RANKS, STATUS, DEPARTMENTS, MEMBERS, LEADERSHIP, FAHNDUNGEN, KPIS,
  STATUS_DONUT, WARN_BARS, TOP_POSITIONS, TIMELINE_TYPES, TARGET_POSITIONS, WEEK_PERF,
  THEME_TEMPLATES, avatarFor,
});
