export interface Becken {
  zb_id: number;
  zb_ber_id: number;
  zb_name: string;
  zb_short_code: string | null;
  zb_color: string | null;
  zb_gps_lat: number | null;
  zb_gps_lng: number | null;
  zb_active: boolean;
  created_at: string;
  updated_at: string;
}

export interface ClassInstructorPriority {
  zctip_user_id: number;
  zctip_priority: number;
  user_name?: string;
}

export interface ClassTemplateSchedule {
  zcts_id?: number;
  zcts_weekday: number;
  zcts_start_time: string;
  zcts_end_time: string;
  priorities: ClassInstructorPriority[];
}

export interface ClassTemplate {
  zct_id: number;
  zct_ber_id: number;
  zct_becken_id: number;
  zct_required_role_id: number;
  zct_name: string;
  zct_description: string | null;
  zct_color: string | null;
  zct_capacity: number | null;
  zct_valid_from: string;
  zct_valid_to: string;
  zct_priority: number;
  zct_holiday_mode: boolean;
  zct_parent_template_id: number | null;
  zct_active: boolean;
  schedules: ClassTemplateSchedule[];
}

export interface BerClassSettings {
  zbcs_ber_id: number;
  zbcs_becken_transfer_minutes: number;
  zbcs_class_watchdog_user_id: number | null;
}

export interface RegenerateResult {
  inserted: number;
  deleted_stale: number;
  preserved_locked: number;
}

export type ClassSessionStatus =
  | 'pending_assignment'
  | 'proposed'
  | 'approved'
  | 'unstaffed'
  | 'cancelled';

export interface ClassSession {
  zcs_id: number;
  zcs_class_template_id: number;
  zcs_schedule_id: number;
  zcs_ber_id: number;
  zcs_date: string;
  zcs_start_time: string;
  zcs_end_time: string;
  zcs_status: ClassSessionStatus;
  zcs_shift_id: number | null;
  zcs_shift_assignment_id: number | null;
  zcs_proposed_user_id: number | null;
  zcs_proposed_at: string | null;
  zcs_approved_at: string | null;
  zcs_approved_by: number | null;
  zcs_resolver_log: unknown[] | string;
  template?: {
    zct_id: number;
    zct_name: string;
    zct_color: string | null;
    zct_becken_id: number;
    zct_required_role_id: number;
  };
  becken?: {
    zb_id: number;
    zb_short_code: string | null;
    zb_color: string | null;
    zb_name: string;
  };
  proposed_user_name?: string;
}

export interface ResolverReport {
  sessions_proposed: number;
  sessions_unstaffed: number;
  sessions_skipped_approved: number;
}

export interface ApproveWeekResult {
  approved: number;
  failed: number[];
}
