export interface IssueTyp {
  id: number;
  name: string;
  parent_id: number | null;
  icon: string | null;
  farbe: string | null;
  erlaubt_abgelehnt: boolean;
  sort_order: number;
  aktiv: boolean;
  children?: IssueTyp[];
}

export interface Issue {
  id: number;
  titel: string;
  beschreibung: string | null;
  typ_id: number;
  typ_name: string;
  typ_icon: string | null;
  typ_farbe: string | null;
  typ_erlaubt_abgelehnt: boolean;
  prioritaet: string;
  status: string;
  erstellt_von: string;
  erstellt_von_name?: string;
  zugewiesen_an: string | null;
  zugewiesen_an_name?: string | null;
  faellig_am: string | null;
  created_at: string;
  updated_at: string;
}

export interface IssueComment {
  id: number;
  issue_id: number;
  autor_id: string;
  autor_name?: string;
  inhalt: string;
  created_at: string;
}

export interface IssueHistorie {
  id: number;
  issue_id: number;
  aktion: string;
  details: Record<string, unknown> | null;
  erstellt_von: string | null;
  erstellt_von_name: string | null;
  erstellt_am: string;
}

export interface CreateIssuePayload {
  titel: string;
  beschreibung?: string;
  typ_id?: number;
  prioritaet?: string;
  faellig_am?: string | null;
}

export interface UpdateIssuePayload {
  titel?: string;
  beschreibung?: string;
  typ_id?: number;
  prioritaet?: string;
  status?: string;
  zugewiesen_an?: string | null;
  kommentar?: string;
  faellig_am?: string | null;
}

export interface IssueFilters {
  typ_id?: number[];
  prioritaet?: string[];
  status?: string[];
  erstellt_von?: string;
  zugewiesen_an?: string;
}

export interface AssignableMember {
  id: string;
  name: string;
}

export interface IssueStatusDef {
  id: number;
  schluessel: string;
  bezeichnung: string;
  farbe: string;
  ist_abschluss: boolean;
  ist_initial: boolean;
  benoetigt_typ_freigabe: boolean;
  sort_order: number;
  aktiv: boolean;
}

export interface IssuePriorityDef {
  id: number;
  schluessel: string;
  bezeichnung: string;
  farbe: string;
  sort_order: number;
  aktiv: boolean;
}

export interface IssueStatusCount {
  schluessel: string;
  bezeichnung: string;
  farbe: string;
  ist_abschluss: boolean;
  count: number;
}

export type IssueWidgetSummary = IssueStatusCount[];

export interface IssueDatei {
  id: string;
  issue_id: number;
  dateiname: string;
  dateipfad: string;
  dateityp: string | null;
  dateigroesse: number | null;
  hochgeladen_von: string | null;
  hochgeladen_am: string;
}
