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

export interface ChecklistVorlageItem {
  id: number;
  vorlage_id: number;
  bezeichnung: string;
  beschreibung?: string;
  pflicht: boolean;
  sort_order: number;
  parent_item_id?: number | null;
}

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

export interface ChecklistVorlage {
  id: number;
  name: string;
  fahrzeug_typ_ids?: number[];
  fahrzeug_ids?: string[];
  ausruestung_typ_ids?: number[];
  ausruestung_ids?: string[];
  fahrzeug_typ_names?: string[];
  fahrzeug_names?: string[];
  ausruestung_typ_names?: string[];
  ausruestung_names?: string[];
  intervall?: 'weekly' | 'monthly' | 'quarterly' | 'halfyearly' | 'yearly' | 'custom' | null;
  intervall_tage?: number;
  beschreibung?: string;
  aktiv: boolean;
  items?: ChecklistVorlageItem[];
  created_at: string;
  updated_at: string;
}

export interface FahrzeugChecklistItem {
  id: number;
  fahrzeug_id: string;
  bezeichnung: string;
  beschreibung?: string;
  pflicht: boolean;
  sort_order: number;
  aktiv: boolean;
}

export interface ChecklistAusfuehrungItem {
  id: number;
  ausfuehrung_id: string;
  vorlage_item_id?: number;
  fahrzeug_item_id?: number;
  ausruestung_item_id?: number;
  bezeichnung: string;
  ergebnis?: 'ok' | 'nok' | 'na';
  kommentar?: string;
  parent_ausfuehrung_item_id?: number | null;
  created_at: string;
}

export interface ChecklistAusfuehrung {
  id: string;
  fahrzeug_id?: string;
  fahrzeug_name?: string;
  ausruestung_id?: string;
  ausruestung_name?: string;
  vorlage_id?: number;
  vorlage_name?: string;
  status: 'offen' | 'abgeschlossen' | 'unvollstaendig' | 'freigegeben';
  ausgefuehrt_von?: string;
  ausgefuehrt_von_name?: string;
  ausgefuehrt_am?: string;
  freigegeben_von?: string;
  freigegeben_von_name?: string;
  freigegeben_am?: string;
  notizen?: string;
  items?: ChecklistAusfuehrungItem[];
  created_at: string;
}

export interface ChecklistFaelligkeit {
  fahrzeug_id?: string;
  fahrzeug_name?: string;
  ausruestung_id?: string;
  ausruestung_name?: string;
  vorlage_id: number;
  vorlage_name: string;
  naechste_faellig_am: string;
  letzte_ausfuehrung_id?: string;
}

export type ChecklistAusfuehrungStatus = ChecklistAusfuehrung['status'];

export const CHECKLIST_STATUS_LABELS: Record<ChecklistAusfuehrungStatus, string> = {
  offen: 'Offen',
  abgeschlossen: 'Abgeschlossen',
  unvollstaendig: 'Unvollst\u00e4ndig',
  freigegeben: 'Freigegeben',
};

export const CHECKLIST_STATUS_COLORS: Record<ChecklistAusfuehrungStatus, 'default' | 'warning' | 'success' | 'info'> = {
  offen: 'default',
  abgeschlossen: 'info',
  unvollstaendig: 'warning',
  freigegeben: 'success',
};

export interface ChecklistVorlageFilter {
  aktiv?: boolean;
}

export interface ChecklistAusfuehrungFilter {
  fahrzeug_id?: string;
  vorlage_id?: number;
  status?: ChecklistAusfuehrungStatus[];
}

export interface CreateVorlagePayload {
  name: string;
  fahrzeug_typ_ids?: number[];
  fahrzeug_ids?: string[];
  ausruestung_typ_ids?: number[];
  ausruestung_ids?: string[];
  intervall?: 'weekly' | 'monthly' | 'quarterly' | 'halfyearly' | 'yearly' | 'custom' | null;
  intervall_tage?: number | null;
  beschreibung?: string | null;
  aktiv?: boolean;
}

export interface UpdateVorlagePayload {
  name?: string;
  fahrzeug_typ_ids?: number[];
  fahrzeug_ids?: string[];
  ausruestung_typ_ids?: number[];
  ausruestung_ids?: string[];
  intervall?: 'weekly' | 'monthly' | 'quarterly' | 'halfyearly' | 'yearly' | 'custom' | null;
  intervall_tage?: number | null;
  beschreibung?: string | null;
  aktiv?: boolean;
}

export interface CreateVorlageItemPayload {
  bezeichnung: string;
  beschreibung?: string;
  pflicht?: boolean;
  sort_order?: number;
  parent_item_id?: number | null;
}

export interface UpdateVorlageItemPayload {
  bezeichnung?: string;
  beschreibung?: string | null;
  pflicht?: boolean;
  sort_order?: number;
}

export interface CreateFahrzeugItemPayload {
  bezeichnung: string;
  beschreibung?: string;
  pflicht?: boolean;
  sort_order?: number;
}

export interface UpdateFahrzeugItemPayload {
  bezeichnung?: string;
  beschreibung?: string | null;
  pflicht?: boolean;
  sort_order?: number;
  aktiv?: boolean;
}

export interface SubmitAusfuehrungPayload {
  items: { itemId: number; ergebnis: 'ok' | 'nok' | 'na'; kommentar?: string }[];
  notizen?: string;
}

export interface ChecklistWidgetSummary {
  overdue: ChecklistFaelligkeit[];
  dueSoon: ChecklistFaelligkeit[];
}

export interface ChecklistOverviewChecklist {
  vorlage_id: number;
  vorlage_name: string;
  intervall?: string | null;
  next_due?: string | null;
}

export interface ChecklistOverviewItem {
  id: string;
  name: string;
  kurzname?: string;
  checklists: ChecklistOverviewChecklist[];
}

export interface ChecklistOverviewResponse {
  vehicles: ChecklistOverviewItem[];
  equipment: ChecklistOverviewItem[];
}
