// Ausrüstungsanfrage (Equipment Request) types

// ── Categories ──

export interface AusruestungKategorie {
  id: number;
  name: string;
  parent_id?: number | null;
  erstellt_am?: string;
}

// ── Characteristics ──

export interface AusruestungEigenschaft {
  id: number;
  artikel_id: number;
  name: string;
  typ: 'options' | 'freitext';
  optionen?: string[];
  pflicht: boolean;
  sort_order: number;
}

export interface AusruestungPositionEigenschaft {
  eigenschaft_id: number;
  eigenschaft_name: string;
  wert: string;
}

// ── Catalog Items ──

export interface AusruestungArtikel {
  id: number;
  bezeichnung: string;
  beschreibung?: string;
  kategorie?: string;
  kategorie_id?: number;
  kategorie_name?: string;
  bild_pfad?: string;
  geschaetzter_preis?: number;
  aktiv: boolean;
  erstellt_von?: string;
  erstellt_am: string;
  aktualisiert_am: string;
  eigenschaften_count?: number;
  eigenschaften?: AusruestungEigenschaft[];
  bevorzugter_lieferant_id?: number | null;
  bevorzugter_lieferant_name?: string;
}

export interface AusruestungArtikelFormData {
  bezeichnung: string;
  beschreibung?: string;
  kategorie?: string;
  kategorie_id?: number | null;
  geschaetzter_preis?: number;
  aktiv?: boolean;
  bevorzugter_lieferant_id?: number | null;
}

// ── Requests ──

export type AusruestungAnfrageStatus = 'offen' | 'genehmigt' | 'abgelehnt' | 'bestellt' | 'erledigt';

export const AUSRUESTUNG_STATUS_LABELS: Record<AusruestungAnfrageStatus, string> = {
  offen: 'Offen',
  genehmigt: 'Genehmigt',
  abgelehnt: 'Abgelehnt',
  bestellt: 'Bestellt',
  erledigt: 'Erledigt',
};

export const AUSRUESTUNG_STATUS_COLORS: Record<AusruestungAnfrageStatus, 'default' | 'info' | 'error' | 'primary' | 'success'> = {
  offen: 'default',
  genehmigt: 'info',
  abgelehnt: 'error',
  bestellt: 'primary',
  erledigt: 'success',
};

export interface AusruestungAnfrage {
  id: number;
  anfrager_id: string;
  anfrager_name?: string;
  fuer_benutzer_name?: string;
  bezeichnung?: string;
  status: AusruestungAnfrageStatus;
  notizen?: string;
  admin_notizen?: string;
  bearbeitet_von?: string;
  bearbeitet_von_name?: string;
  bestell_nummer?: number;
  bestell_jahr?: number;
  erstellt_am: string;
  aktualisiert_am: string;
  positionen_count?: number;
  geliefert_count?: number;
  items_count?: number;
  im_haus?: boolean;
  im_haus_count?: number;
}

export interface AusruestungAnfragePosition {
  id: number;
  anfrage_id: number;
  artikel_id?: number;
  bezeichnung: string;
  menge: number;
  einheit?: string;
  notizen?: string;
  geliefert: boolean;
  im_haus: boolean;
  erstellt_am: string;
  eigenschaften?: AusruestungPositionEigenschaft[];
  ist_ersatz: boolean;
  altes_geraet_zurueckgegeben: boolean;
  zuweisung_typ?: 'ausruestung' | 'persoenlich' | 'keine' | null;
  zuweisung_ausruestung_id?: string | null;
  zuweisung_persoenlich_id?: string | null;
  persoenlich_id?: string | null;
  aktueller_zustand?: string | null;
  neuer_zustand?: string | null;
  bestellung_info?: {
    bestellung_id: number;
    bestellung_bezeichnung: string;
    bestellung_status: string;
    bestellung_laufende_nummer?: number | null;
    bestellung_erstellt_am?: string;
    erhalten_menge: number;
    bestellt_menge: number;
  } | null;
}

export interface AusruestungAnfrageFormItem {
  artikel_id?: number;
  bezeichnung: string;
  menge: number;
  notizen?: string;
  eigenschaften?: { eigenschaft_id: number; wert: string }[];
  ist_ersatz?: boolean;
  persoenlich_id?: string;
  neuer_zustand?: string;
}

// ── API Response Types ──

export interface AusruestungAnfrageDetailResponse {
  anfrage: AusruestungAnfrage;
  positionen: AusruestungAnfragePosition[];
  linked_bestellungen?: {
    id: number;
    bezeichnung: string;
    status: string;
    laufende_nummer?: number;
    erstellt_am?: string;
    total_received?: number;
    total_ordered?: number;
  }[];
  im_haus?: boolean;
}

// ── Overview ──

export interface AusruestungOverviewItem {
  bezeichnung: string;
  total_menge: number;
  anfrage_count: number;
}

export interface AusruestungOverview {
  items: AusruestungOverviewItem[];
  pending_count: number;
  approved_count: number;
  unhandled_count: number;
  total_items: number;
}

export interface AusruestungWidgetOverview {
  total_count: number;
  pending_count: number;
  approved_count: number;
  unhandled_count: number;
}

// ── Create-Orders Wizard ──

export interface UnassignedPosition {
  id: number;
  bezeichnung: string;
  menge: number;
  artikel_id: number | null;
  anfrage_id: number;
  anfrage_bezeichnung: string | null;
  bestell_nummer: number | null;
  bestell_jahr: number | null;
  fuer_wen: string | null;
}

export interface CreateOrderPositionPayload {
  position_id: number;
  bezeichnung: string;
  menge: number;
  einheit?: string;
  notizen?: string;
  artikel_id?: number;
  spezifikationen?: string[];
}

export interface CreateOrderPayload {
  lieferant_id: number;
  bezeichnung: string;
  positionen: CreateOrderPositionPayload[];
}

export interface CreateOrdersRequest {
  orders: CreateOrderPayload[];
}

export interface CreatedBestellung {
  id: number;
  bezeichnung: string;
  lieferant_name: string;
}

export interface CreateOrdersResponse {
  created_bestellungen: CreatedBestellung[];
}
