// =============================================================================
// Equipment Management — Domain Model
// =============================================================================

// ── Enums ─────────────────────────────────────────────────────────────────────

export enum AusruestungStatus {
  Einsatzbereit = 'einsatzbereit',
  Beschaedigt   = 'beschaedigt',
  InWartung     = 'in_wartung',
  AusserDienst  = 'ausser_dienst',
}

export const AusruestungStatusLabel: Record<AusruestungStatus, string> = {
  [AusruestungStatus.Einsatzbereit]: 'Einsatzbereit',
  [AusruestungStatus.Beschaedigt]:   'Beschädigt',
  [AusruestungStatus.InWartung]:     'In Wartung',
  [AusruestungStatus.AusserDienst]:  'Außer Dienst',
};

export type AusruestungWartungslogArt = 'Prüfung' | 'Reparatur' | 'Sonstiges';

// ── Lookup Entity ─────────────────────────────────────────────────────────────

export interface AusruestungKategorie {
  id:         string;
  name:       string;
  kurzname:   string;
  sortierung: number;
  motorisiert: boolean;
}

// ── Core Entity ───────────────────────────────────────────────────────────────

export interface Ausruestung {
  id:                      string;
  bezeichnung:             string;
  kategorie_id:            string;
  seriennummer:            string | null;
  inventarnummer:          string | null;
  hersteller:              string | null;
  baujahr:                 number | null;
  status:                  AusruestungStatus;
  status_bemerkung:        string | null;
  ist_wichtig:             boolean;
  fahrzeug_id:             string | null;
  standort:                string;
  pruef_intervall_monate:  number | null;
  letzte_pruefung_am:      Date | null;
  naechste_pruefung_am:    Date | null;
  bemerkung:               string | null;
  deleted_at:              Date | null;
  created_at:              Date;
  updated_at:              Date;
}

// ── List Item (Grid / Card view) ──────────────────────────────────────────────

export interface AusruestungListItem {
  id:                          string;
  bezeichnung:                 string;
  kategorie_id:                string;
  seriennummer:                string | null;
  inventarnummer:              string | null;
  hersteller:                  string | null;
  baujahr:                     number | null;
  status:                      AusruestungStatus;
  status_bemerkung:            string | null;
  ist_wichtig:                 boolean;
  fahrzeug_id:                 string | null;
  standort:                    string;
  pruef_intervall_monate:      number | null;
  letzte_pruefung_am:          Date | null;
  naechste_pruefung_am:        Date | null;
  bemerkung:                   string | null;
  created_at:                  Date;
  updated_at:                  Date;
  kategorie_name:              string;
  kategorie_kurzname:          string;
  kategorie_motorisiert:       boolean;
  fahrzeug_bezeichnung:        string | null;
  fahrzeug_kurzname:           string | null;
  pruefung_tage_bis_faelligkeit: number | null;
}

// ── Detail View ───────────────────────────────────────────────────────────────

export interface AusruestungDetail extends AusruestungListItem {
  wartungslog: AusruestungWartungslog[];
}

// ── Wartungslog Entity ────────────────────────────────────────────────────────

export interface AusruestungWartungslog {
  id:               string;
  ausruestung_id:   string;
  datum:            Date;
  art:              AusruestungWartungslogArt;
  beschreibung:     string;
  ergebnis:         string | null;
  kosten:           number | null;
  pruefende_stelle: string | null;
  dokument_url:     string | null;
  erfasst_von:      string | null;
  created_at:       Date;
}

// ── Dashboard KPI ─────────────────────────────────────────────────────────────

export interface EquipmentStats {
  total:              number;
  einsatzbereit:      number;
  beschaedigt:        number;
  inWartung:          number;
  ausserDienst:       number;
  inspectionsDue:     number;
  inspectionsOverdue: number;
  wichtigNichtBereit: number;
}

// ── Vehicle Equipment Warning ─────────────────────────────────────────────────

export interface VehicleEquipmentWarning {
  fahrzeug_id:    string;
  ausruestung_id: string;
  bezeichnung:    string;
  status:         AusruestungStatus;
  kategorie_name: string;
}

// ── Create / Update DTOs ──────────────────────────────────────────────────────

export interface CreateAusruestungData {
  bezeichnung:             string;
  kategorie_id:            string;
  seriennummer?:           string;
  inventarnummer?:         string;
  hersteller?:             string;
  baujahr?:                number;
  status?:                 AusruestungStatus;
  status_bemerkung?:       string;
  ist_wichtig?:            boolean;
  fahrzeug_id?:            string;
  standort?:               string;
  pruef_intervall_monate?: number;
  letzte_pruefung_am?:     string;
  naechste_pruefung_am?:   string;
  bemerkung?:              string;
}

export interface UpdateAusruestungData {
  bezeichnung?:             string;
  kategorie_id?:            string;
  seriennummer?:            string | null;
  inventarnummer?:          string | null;
  hersteller?:              string | null;
  baujahr?:                 number | null;
  status?:                  AusruestungStatus;
  status_bemerkung?:        string | null;
  ist_wichtig?:             boolean;
  fahrzeug_id?:             string | null;
  standort?:                string;
  pruef_intervall_monate?:  number | null;
  letzte_pruefung_am?:      string | null;
  naechste_pruefung_am?:    string | null;
  bemerkung?:               string | null;
}

export interface CreateAusruestungWartungslogData {
  datum:                  string;
  art:                    AusruestungWartungslogArt;
  beschreibung:           string;
  ergebnis?:              string;
  kosten?:                number;
  pruefende_stelle?:      string;
  dokument_url?:          string;
  naechste_pruefung_am?:  string;
}

export interface UpdateAusruestungWartungslogData {
  datum?:                  string;
  art?:                    AusruestungWartungslogArt;
  beschreibung?:           string;
  ergebnis?:               string | null;
  kosten?:                 number | null;
  pruefende_stelle?:       string | null;
  naechste_pruefung_am?:   string | null;
}
