export type OeeAnalysisHeader = {
  id: string
  name: string | null
  project_id: string | null
  supplier_id: string | null
  analysis_date: string | null
  period_start: string | null
  period_end: string | null
  is_orphan: boolean
  status: string | null
}

export type OeeStation = {
  id: string
  oee_record_id: string
  name: string
  linked_process_step_id: string | null
  order_idx: number
}

export const STEP_KEYS = ['grunddaten', 'stationen', 'messungen', 'auswertung'] as const
export type StepKey = (typeof STEP_KEYS)[number]

export const STEP_LABEL_DE: Record<StepKey, string> = {
  grunddaten: 'Grunddaten',
  stationen: 'Stationen',
  messungen: 'Messungen',
  auswertung: 'Auswertung',
}

export type HeaderInput = {
  name: string
  project_id: string | null
  supplier_id: string | null
  analysis_date: string
  period_start: string | null
  period_end: string | null
}

export type HeaderValidationError =
  | 'name_required'
  | 'analysis_date_required'
  | 'period_end_before_start'
  | 'supplier_required_for_orphan'
  | 'project_required'

export function validateHeaderInput(
  input: HeaderInput,
  mode: 'with_project' | 'orphan' = 'orphan',
): { ok: true } | { ok: false; error: HeaderValidationError } {
  if (!input.name.trim()) return { ok: false, error: 'name_required' }
  if (!input.analysis_date) return { ok: false, error: 'analysis_date_required' }
  if (input.period_start && input.period_end && input.period_end < input.period_start) {
    return { ok: false, error: 'period_end_before_start' }
  }
  if (mode === 'with_project' && !input.project_id) {
    return { ok: false, error: 'project_required' }
  }
  if (mode === 'orphan' && !input.supplier_id) {
    return { ok: false, error: 'supplier_required_for_orphan' }
  }
  return { ok: true }
}

export type StationInput = {
  name: string
  linked_process_step_id: string | null
  order_idx: number
}

export type StationValidationError = 'name_required' | 'order_idx_invalid'

export function validateStationInput(input: StationInput): { ok: true } | { ok: false; error: StationValidationError } {
  if (!input.name.trim()) return { ok: false, error: 'name_required' }
  if (!Number.isInteger(input.order_idx) || input.order_idx < 0) {
    return { ok: false, error: 'order_idx_invalid' }
  }
  return { ok: true }
}

export const VALIDATION_LABEL_DE: Record<string, string> = {
  name_required: 'Name fehlt',
  analysis_date_required: 'Analyse-Datum fehlt',
  period_end_before_start: 'Zeitraum-Ende liegt vor Start',
  supplier_required_for_orphan: 'Ohne Projekt: Lieferant Pflicht',
  project_required: 'Projekt auswählen',
  order_idx_invalid: 'Order-Index ungültig',
}

export const MAX_STATIONS_UI = 10

export function nextStepFromCurrent(current: StepKey): StepKey | null {
  const idx = STEP_KEYS.indexOf(current)
  if (idx === -1 || idx >= STEP_KEYS.length - 1) return null
  return STEP_KEYS[idx + 1]
}

export function prevStepFromCurrent(current: StepKey): StepKey | null {
  const idx = STEP_KEYS.indexOf(current)
  if (idx <= 0) return null
  return STEP_KEYS[idx - 1]
}
