import { User, Department } from './shift';

export interface VacationRequest {
  zvr_id: number;
  zvr_user_id: number;
  zvr_ber_id?: number;
  zvr_from_date: string; // YYYY-MM-DD
  zvr_to_date: string; // YYYY-MM-DD
  zvr_status: 'submitted' | 'approved' | 'rejected';
  zvr_notes?: string;
  zvr_reason?: string;
  zvr_reviewed_by?: number;
  zvr_reviewed_at?: string;
  zvr_active: boolean;
  created_at: string;
  updated_at: string;

  // Relationships
  user?: User;
  department?: Department;
  reviewer?: User;

  // Computed attributes
  duration_days: number;
  has_shift_conflicts: boolean;
  conflicting_shifts?: ConflictingShift[];
  user_details?: {
    full_name: string;
    initials: string;
    usr_id: number;
  };
}

export interface SickRequest {
  zsr_id: number;
  zsr_user_id: number;
  zsr_ber_id?: number;
  zsr_from_date: string; // YYYY-MM-DD
  zsr_to_date: string; // YYYY-MM-DD
  zsr_status: 'submitted' | 'approved' | 'rejected';
  zsr_notes?: string;
  zsr_file_path?: string;
  zsr_file_original_name?: string;
  zsr_proof_method?: 'none' | 'file' | 'eau_consent';
  zsr_reviewed_by?: number;
  zsr_reviewed_at?: string;
  zsr_active: boolean;
  created_at: string;
  updated_at: string;

  // Relationships
  user?: User;
  department?: Department;
  reviewer?: User;

  // Computed attributes
  duration_days: number;
  has_file: boolean;
  has_proof_file?: boolean;
  eau_consent_at?: string;
  affected_shifts?: ConflictingShift[];
  user_details?: {
    full_name: string;
    initials: string;
    usr_id: number;
  };
}

export interface ConflictingShift {
  shift_id: number;
  date: string; // YYYY-MM-DD
  name: string;
  start_time: string; // HH:mm
  end_time: string; // HH:mm
}

export interface VacationBalance {
  total: number;
  used: number;
  available: number;
  year: number;
}

export interface VacationFormData {
  zvr_user_id: number;
  zvr_from_date: string;
  zvr_to_date: string;
  zvr_reason?: string;
  zvr_notes?: string;
}

export interface SickFormData {
  zsr_user_id: number;
  zsr_from_date: string;
  zsr_to_date: string;
  zsr_notes?: string;
  file?: File;
}

export interface LeaveFilters {
  ber_id?: number;
  user_id?: number;
  status?: 'submitted' | 'approved' | 'rejected';
  from_date?: string;
  to_date?: string;
  show_past?: boolean;
}

export type LeaveRequestStatus = 'submitted' | 'approved' | 'rejected';

export interface LeaveActionResponse {
  message: string;
  request: VacationRequest | SickRequest;
  days_approved?: number;
  shifts_unassigned?: number;
}
