// 작업자 화면 타입 정의

import type { WorkOrder } from '../ProductionDashboard/types';

// ===== 공정 탭 =====
export type ProcessTab = 'screen' | 'slat' | 'bending';

export const PROCESS_TAB_LABELS: Record<ProcessTab, string> = {
  screen: '스크린 공정',
  slat: '슬랫 공정',
  bending: '절곡 공정',
};

// ===== 수주 정보 =====
export interface OrderInfo {
  orderDate: string;         // 수주일
  lotNo: string;             // 로트번호
  siteName: string;          // 현장명
  client: string;            // 수주처
  salesManager: string;      // 수주담당자
  managerPhone: string;      // 담당자연락처
  shippingDate: string;      // 출고예정일
}

// ===== 작업 정보 =====
export interface WorkInfo {
  productionManagerId: string;  // 생산 담당자 ID
  productionDate: string;       // 생산일자
}

// ===== 작업 아이템 (카드 1개 단위) =====
export interface WorkItemData {
  id: string;
  apiItemId?: number;            // 실제 work_order_items.id (API 호출용, 첫 번째 item)
  apiItemIds?: number[];         // 개소 내 모든 work_order_items.id 배열 (절곡 등 복수 item)
  workOrderId?: string;          // 소속 작업지시 ID (API 호출용)
  itemNo: number;                // 번호 (1, 2, 3...)
  itemCode: string;              // 품목코드 (KWWS03)
  itemName: string;              // 품목명 (와이어)
  floor: string;                 // 층 (1층)
  code: string;                  // 부호 (FSS-01)
  width: number;                 // 폭 (mm)
  height: number;                // 높이 (mm)
  quantity: number;              // 수량
  processType: ProcessTab;       // 공정 타입
  steps: WorkStepData[];         // 공정 단계들
  isWip?: boolean;               // 재공품 여부
  bdCode?: string;               // 절곡품 BD- 코드 (예: BD-ST-24)
  isJointBar?: boolean;          // 조인트바 여부
  // 스크린 전용
  cuttingInfo?: CuttingInfo;
  // 슬랫 전용
  slatInfo?: SlatInfo;
  // 슬랫 조인트바 전용
  slatJointBarInfo?: SlatJointBarInfo;
  // 절곡 전용
  bendingInfo?: BendingInfo;
  // 재공품 전용
  wipInfo?: WipInfo;
  // 자재 투입 목록
  materialInputs?: MaterialListItem[];
}

// ===== 재공품 전용 정보 =====
export interface WipInfo {
  specification: string;     // 규격 (EGI 1.55T (W576))
  lengthQuantity: string;    // 길이별 수량 (4,000mm X 6개)
}

// ===== 절단 정보 (스크린 전용) =====
export interface CuttingInfo {
  width: number;     // 절단 폭 (mm)
  sheets: number;    // 장 수
}

// ===== 슬랫 전용 정보 =====
export interface SlatInfo {
  length: number;      // 길이 (mm)
  slatCount: number;   // 슬랫 매수
  jointBar: number;    // 조인트바 개수
  glassQty: number;    // 방화유리 수량
}

// ===== 슬랫 조인트바 전용 정보 =====
export interface SlatJointBarInfo {
  specification: string;   // 규격 (예: EGI 1.6T)
  length: number;          // 길이 (mm)
  quantity: number;        // 수량
}

// ===== 절곡 전용 정보 =====
export interface BendingInfo {
  common: BendingCommonInfo;          // 공통사항
  detailParts: BendingDetailPart[];   // 세부부품
}

export interface BendingCommonInfo {
  kind: string;                     // 종류 (벽면형 120X70)
  type: string;                     // 유형 (벽면형)
  lengthQuantities: { length: number; quantity: number }[];  // 길이별 수량
}

export interface BendingDetailPart {
  partName: string;     // 부품명 (엘바, 하장바)
  material: string;     // 재질 (EGI 1.6T)
  barcyInfo: string;    // 바아시 정보
}

// ===== 공정 단계 (pill) =====
export interface WorkStepData {
  id: string;
  name: string;               // 단계명 (자재투입, 절단, 미싱, 중간검사, 포장완료)
  isMaterialInput: boolean;   // 자재투입 단계 여부
  isInspection?: boolean;     // 중간검사 단계 여부
  isCompleted: boolean;       // 완료 여부
  // 공정 단계 설정 연동 (공정관리 페이지의 단계 설정)
  stepProgressId?: number;    // work_order_step_progress.id (서버 완료 토글용)
  needsInspection?: boolean;  // 검사여부 (ProcessStep.needs_inspection)
  connectionType?: string;    // 연결 유형: '팝업' | '없음'
  connectionTarget?: string;  // 도달: '중간검사' 등
  completionType?: string;    // 완료 유형: 'inspection_complete' | 'click_complete' | 'selection_complete'
}

// ===== 자재 투입 목록 항목 =====
export interface MaterialListItem {
  id: string;
  lotNo: string;         // 로트번호
  itemName: string;      // 품목명
  quantity: number;       // 수량
  unit: string;           // 단위
}

// ===== 자재 투입 모달 항목 =====
export interface MaterialInput {
  id: string;
  lotNo: string;           // 로트번호
  materialName: string;    // 품목명
  quantity: number;        // 수량
  unit: string;            // 단위
  inputQuantity: number;   // 투입 수량 (사용자 입력)
}

// ===== 작업자 작업 아이템 (WorkOrder 확장) =====
export interface WorkerWorkItem extends WorkOrder {
  processDetail?: ProcessDetail;
}

// 공정상세 정보
export interface ProcessDetail {
  materialRequired: boolean;
  steps: ProcessStep[];
  totalSteps: number;
  completedSteps: number;
}

// 공정 단계
export interface ProcessStep {
  id: string;
  stepNo: number;
  name: string;
  isInspection?: boolean;
  completed: number;
  total: number;
  items: ProcessStepItem[];
}

// 공정 단계 상세 항목
export interface ProcessStepItem {
  id: string;
  itemNo: string;
  location: string;
  isPriority: boolean;
  spec: string;
  material: string;
  lot: string;
}

// 이슈 유형
export type IssueType = 'defect' | 'noStock' | 'delay' | 'equipment' | 'other';

export const ISSUE_TYPE_LABELS: Record<IssueType, string> = {
  defect: '불량품 발생',
  noStock: '재고 없음',
  delay: '일정 지연',
  equipment: '설비 문제',
  other: '기타',
};

// 작업자 화면 통계
export interface WorkerStats {
  assigned: number;
  inProgress: number;
  completed: number;
  urgent: number;
}

// 완료 토스트 정보
export interface CompletionToastInfo {
  orderNo: string;
  quantity: number;
  lotNo: string;
}

// ===== 검사 템플릿 타입 =====

export interface InspectionTolerance {
  type: 'symmetric' | 'asymmetric' | 'range';
  value?: number;
  plus?: number;
  minus?: number;
  min?: number;
  max?: number;
}

/** 섹션 아이템 (검사항목) - API formatTemplateForReact 응답 기준 */
export interface InspectionTemplateSectionItem {
  id: number;
  field_values: Record<string, unknown> | null;
  category: string | null;
  item: string | null;
  standard: string | null;
  standard_criteria: Record<string, number> | string | null;
  tolerance: InspectionTolerance | null;
  method: string | null;
  method_name: string | null;
  measurement_type: string | null;
  frequency: string | null;
  frequency_n: number | null;
  frequency_c: number | null;
  regulation: string | null;
  sort_order: number;
  // backward compat (InspectionInputModal uses these)
  name?: string;
  type?: string;
  is_required?: boolean;
  options?: Record<string, unknown> | null;
}

/** 템플릿 전체 구조 (formatTemplateForReact 응답) */
export interface InspectionTemplateFormat {
  id: number;
  name: string;
  category: string;
  title?: string;
  company_name?: string;
  company_address?: string;
  company_contact?: string;
  footer_remark_label?: string;
  footer_judgement_label?: string;
  footer_judgement_options?: string[];
  sections: {
    id: number;
    name: string;
    title?: string;
    image_path?: string | null;
    sort_order: number;
    items: InspectionTemplateSectionItem[];
  }[];
  section_fields: {
    id: number;
    field_key: string;
    label: string;
    field_type: string;
    options: Record<string, unknown> | null;
    width: string | null;
    is_required: boolean;
    sort_order: number;
  }[];
  columns: {
    id: number;
    label: string;
    column_type: string;
    sub_labels: string[] | null;
    group_name: string | null;
    width: string | null;
    sort_order: number;
  }[];
  approval_lines: {
    id: number;
    name: string;
    dept: string | null;
    role: string | null;
    user_id: number | null;
    sort_order: number;
  }[];
  basic_fields: {
    id: number;
    field_key: string | null;
    label: string;
    field_type: string;
    default_value: string | null;
    sort_order: number;
  }[];
}

/** 검사 단계별 템플릿 */
export interface InspectionTemplateStep {
  step_id: number;
  step_name: string;
  step_code: string;
  sort_order: number;
  template: InspectionTemplateFormat;
}

/** 검사 문서 템플릿 조회 응답 */
export interface InspectionTemplateData {
  work_order_id: number;
  has_template: boolean;
  templates?: InspectionTemplateStep[];
  template?: InspectionTemplateFormat; // backward compat (첫 번째 템플릿)
  work_order_info?: {
    work_order_no: string;
    project_name: string | null;
    process_name: string | null;
    scheduled_date: string | null;
  };
}
