// =============================================================================
// Equipment Management — Frontend Type Definitions
// =============================================================================

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;
}

// ── Equipment Type (many-to-many) ───────────────────────────────────────────

export interface AusruestungTyp {
  id: number;
  name: string;
  beschreibung?: string;
  icon?: string;
}

// ── API Response Shapes ──────────────────────────────────────────────────────

export interface AusruestungListItem {
  id:                            string;
  bezeichnung:                   string;
  kategorie_id:                  string;
  kategorie_name:                string;
  kategorie_kurzname:            string;
  kategorie_motorisiert:         boolean;
  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;
  fahrzeug_bezeichnung:          string | null;
  fahrzeug_kurzname:             string | null;
  standort:                      string;
  naechste_pruefung_am:          string | null;
  pruefung_tage_bis_faelligkeit: number | null;
  created_at:                    string;
  updated_at:                    string;
  typen?:                        AusruestungTyp[];
}

export interface AusruestungDetail extends AusruestungListItem {
  pruef_intervall_monate: number | null;
  letzte_pruefung_am:     string | null;
  bemerkung:              string | null;
  wartungslog:            AusruestungWartungslog[];
}

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

// ── 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;
}

// ── Request Payload Types ────────────────────────────────────────────────────

export interface CreateAusruestungPayload {
  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 type UpdateAusruestungPayload = {
  [K in keyof CreateAusruestungPayload]?: CreateAusruestungPayload[K] | null;
};

export interface UpdateAusruestungStatusPayload {
  status:     AusruestungStatus;
  bemerkung?: string;
}

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

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