export interface ShiftAssignment {
  employee_id: string
  employee_name: string
  shift_id: string
  shift_name: string
  period_id: string
  date: string // ISO date
  start_time: string
  end_time: string
}

export interface SolveResult {
  status: 'solved' | 'infeasible' | 'error'
  assignments: ShiftAssignment[]
  objective_value?: number
  duration_ms?: number
  infeasibility_hints?: Array<{ constraint_id?: string; description: string }>
}

export interface SolveInput {
  organization_id: string
  period_start: string
  period_end: string
  framework: {
    periods: Period[]
    shifts: Shift[]
  }
  employees: Employee[]
  constraints: Array<{ id: string; constraint_json: import('./constraint').ConstraintJSON; hard: boolean; weight?: number }>
}

export interface Period {
  id: string
  name: string
  start_time: string
  end_time: string
  color: string
}

export interface Shift {
  id: string
  period_id: string
  name: string
  duration_hours: number
  workers_required: number
  days_applicable: number[] // 0=Mon...6=Sun, empty = all days
}

export interface Employee {
  id: string
  name: string
  roles: string[]
  skills: string[]
  employment_type: 'full_time' | 'part_time' | 'mini_job'
  weekly_hours_target: number
  max_weekly_hours: number
  available_periods: string[]
  unavailable_dates: string[]
}
