// Bestellungen (Vendor Orders) types

// ── Vendors ──

export interface Lieferant {
  id: number;
  name: string;
  kontakt_name?: string;
  email?: string;
  telefon?: string;
  adresse?: string;
  website?: string;
  notizen?: string;
  erstellt_von?: string;
  erstellt_am: string;
  aktualisiert_am: string;
}

export interface LieferantFormData {
  name: string;
  kontakt_name?: string;
  email?: string;
  telefon?: string;
  adresse?: string;
  website?: string;
  notizen?: string;
}

// ── Orders ──

export type BestellungStatus = 'entwurf' | 'wartet_auf_genehmigung' | 'bereit_zur_bestellung' | 'bestellt' | 'teillieferung' | 'lieferung_pruefen' | 'abgeschlossen';

export const BESTELLUNG_STATUS_LABELS: Record<BestellungStatus, string> = {
  entwurf: 'Entwurf',
  wartet_auf_genehmigung: 'Eingereicht',
  bereit_zur_bestellung: 'Genehmigt',
  bestellt: 'Bestellt',
  teillieferung: 'Teilweise geliefert',
  lieferung_pruefen: 'Vollständig geliefert',
  abgeschlossen: 'Abgeschlossen',
};

export const BESTELLUNG_STATUS_COLORS: Record<BestellungStatus, 'default' | 'info' | 'primary' | 'warning' | 'success' | 'secondary' | 'error'> = {
  entwurf: 'default',
  wartet_auf_genehmigung: 'warning',
  bereit_zur_bestellung: 'info',
  bestellt: 'primary',
  teillieferung: 'warning',
  lieferung_pruefen: 'secondary',
  abgeschlossen: 'success',
};

export interface Bestellung {
  id: number;
  bezeichnung: string;
  lieferant_id?: number;
  lieferant_name?: string;
  lieferant_kontakt_name?: string;
  lieferant_email?: string;
  lieferant_telefon?: string;
  lieferant_adresse?: string;
  besteller_id?: string;
  besteller_name?: string;
  besteller_email?: string;
  besteller_telefon?: string;
  besteller_dienstgrad?: string;
  mitglied_id?: string;
  mitglied_name?: string;
  mitglied_dienstgrad?: string;
  status: BestellungStatus;
  budget?: number;
  steuersatz?: number;
  notizen?: string;
  erstellt_von?: string;
  erstellt_am: string;
  aktualisiert_am: string;
  bestellt_am?: string;
  abgeschlossen_am?: string;
  genehmigt_von?: string;
  genehmigt_am?: string;
  genehmigt_von_name?: string;
  // Computed
  total_cost?: number;
  items_count?: number;
  total_received?: number;
  total_ordered?: number;
  laufende_nummer?: number;
}

export interface BestellungFormData {
  bezeichnung: string;
  lieferant_id?: number;
  besteller_id?: string;
  mitglied_id?: string;
  status?: BestellungStatus;
  steuersatz?: number;
  notizen?: string;
  positionen?: BestellpositionFormData[];
}

// ── Line Items ──

export interface Bestellposition {
  id: number;
  bestellung_id: number;
  bezeichnung: string;
  artikelnummer?: string;
  menge: number;
  einheit: string;
  einzelpreis?: number;
  erhalten_menge: number;
  notizen?: string;
  erstellt_am: string;
  aktualisiert_am: string;
  spezifikationen?: string[];
  artikel_id?: number;
  artikel_bezeichnung?: string;
}

export interface BestellpositionFormData {
  bezeichnung: string;
  artikelnummer?: string;
  menge: number;
  einheit?: string;
  einzelpreis?: number;
  notizen?: string;
  spezifikationen?: string[];
  artikel_id?: number;
}

// ── File Attachments ──

export interface BestellungDatei {
  id: number;
  bestellung_id: number;
  dateiname: string;
  dateipfad: string;
  dateityp: string;
  dateigroesse?: number;
  thumbnail_pfad?: string;
  hochgeladen_von?: string;
  hochgeladen_am: string;
}

// ── Reminders ──

export interface BestellungErinnerung {
  id: number;
  bestellung_id: number;
  faellig_am: string;
  nachricht?: string;
  erledigt: boolean;
  erstellt_von?: string;
  erstellt_am: string;
}

export interface ErinnerungFormData {
  faellig_am: string;
  nachricht?: string;
}

// ── Audit Trail ──

export interface BestellungHistorie {
  id: number;
  bestellung_id: number;
  aktion: string;
  details?: Record<string, unknown>;
  erstellt_von?: string;
  erstellt_von_name?: string;
  erstellt_am: string;
}

// ── API Response Types ──

export interface BestellungDetailResponse {
  bestellung: Bestellung;
  positionen: Bestellposition[];
  dateien: BestellungDatei[];
  erinnerungen: BestellungErinnerung[];
  historie: BestellungHistorie[];
}
