/**
 * 입고관리 타입 정의
 */

// 입고 상태
export type ReceivingStatus =
  | 'order_completed'       // 발주완료
  | 'shipping'              // 배송중
  | 'inspection_pending'    // 검사대기
  | 'receiving_pending'     // 입고대기
  | 'completed'             // 입고완료
  | 'inspection_completed'; // 검사완료

// 상태 라벨
export const RECEIVING_STATUS_LABELS: Record<ReceivingStatus, string> = {
  order_completed: '발주완료',
  shipping: '배송중',
  inspection_pending: '검사대기',
  receiving_pending: '입고대기',
  completed: '입고완료',
  inspection_completed: '검사완료',
};

// 상태 스타일
export const RECEIVING_STATUS_STYLES: Record<ReceivingStatus, string> = {
  order_completed: 'bg-gray-100 text-gray-800',
  shipping: 'bg-blue-100 text-blue-800',
  inspection_pending: 'bg-orange-100 text-orange-800',
  receiving_pending: 'bg-yellow-100 text-yellow-800',
  completed: 'bg-green-100 text-green-800',
  inspection_completed: 'bg-blue-100 text-blue-800',
};

// 상세 페이지용 상태 옵션 (셀렉트박스)
export const RECEIVING_STATUS_OPTIONS = [
  { value: 'receiving_pending', label: '입고대기' },
  { value: 'completed', label: '입고완료' },
  { value: 'inspection_completed', label: '검사완료' },
] as const;

// 수입검사 상태 (리스트 표시용)
export type InspectionDisplayStatus = 'waiting' | 'passed' | 'failed' | 'none';

// 수입검사 상태 라벨
export const INSPECTION_STATUS_LABELS: Record<InspectionDisplayStatus, string> = {
  waiting: '대기',
  passed: '합격',
  failed: '불합격',
  none: '-',
};

// 수입검사 상태 스타일
export const INSPECTION_STATUS_STYLES: Record<InspectionDisplayStatus, string> = {
  waiting: 'bg-yellow-100 text-yellow-800',
  passed: 'bg-green-100 text-green-800',
  failed: 'bg-red-100 text-red-800',
  none: 'bg-gray-100 text-gray-500',
};

// 입고 목록 아이템
export interface ReceivingItem {
  id: string;
  materialNo?: string;       // 입고번호 (receiving_number)
  supplierMaterialNo?: string; // 거래처 자재번호
  lotNo?: string;            // 원자재로트
  itemId?: number;           // 품목 ID
  hasInspectionTemplate?: boolean; // 수입검사 템플릿 연결 여부
  inspectionStatus?: string; // 수입검사 (적/부적/-)
  inspectionResult?: string; // 검사결과 (합격/불합격)
  inspectionDate?: string;   // 검사일
  supplier: string;          // 발주처
  manufacturer?: string;     // 제조사
  itemCode: string;          // 품목코드
  itemType?: string;         // 품목유형
  itemName: string;          // 품목명
  specification?: string;    // 규격
  unit: string;              // 단위
  receivingQty?: number;     // 수량
  receivingDate?: string;    // 입고변경일
  createdBy?: string;        // 작성자
  status: ReceivingStatus;   // 상태
  // 기존 필드 (하위 호환)
  orderNo?: string;          // 발주번호
  orderQty?: number;         // 발주수량
  orderUnit?: string;        // 발주단위
}

// 입고 상세 정보 (기획서 2026-02-03 기준)
export interface ReceivingDetail {
  id: string;
  // 기본 정보
  materialNo?: string;      // 입고번호 (receiving_number, 읽기전용)
  supplierMaterialNo?: string; // 거래처 자재번호 (수정가능)
  lotNo?: string;           // 원자재로트 (수정가능)
  itemId?: number;          // 품목 ID (수입검사 템플릿 조회용)
  itemCode: string;         // 품목코드 (수정가능)
  itemName: string;         // 품목명 (읽기전용 - 품목코드 선택 시 자동)
  specification?: string;   // 규격 (읽기전용)
  unit: string;             // 단위 (읽기전용)
  supplier: string;         // 발주처 (수정가능)
  manufacturer?: string;    // 제조사 (수정가능)
  receivingQty?: number;    // 입고수량 (수정가능)
  receivingDate?: string;   // 입고일 (수정가능)
  createdBy?: string;       // 작성자 (읽기전용)
  status: ReceivingStatus;  // 상태 (수정가능)
  remark?: string;          // 비고 (수정가능)
  // 수입검사 정보
  inspectionDate?: string;  // 검사일 (읽기전용)
  inspectionResult?: string; // 검사결과 (읽기전용) - 합격/불합격
  certificateFile?: string; // 업체 제공 성적서 자료 (수정가능)
  certificateFileId?: number; // 성적서 파일 ID
  certificateFileName?: string; // 파일명
  // 재고 조정 이력
  inventoryAdjustments?: InventoryAdjustmentRecord[];
  // 기존 필드 (하위 호환)
  orderNo?: string;          // 발주번호
  orderDate?: string;        // 발주일자
  orderQty?: number;         // 발주수량
  orderUnit?: string;        // 발주단위
  dueDate?: string;          // 납기일
  receivingLot?: string;     // 입고LOT
  supplierLot?: string;      // 공급업체LOT
  receivingLocation?: string; // 입고위치
  receivingManager?: string;  // 입고담당
}

// 재고 조정 이력 레코드 (입고 상세 내)
export interface InventoryAdjustmentRecord {
  id: string;
  adjustmentDate: string;    // 조정일시
  quantity: number;           // 증감 수량 (양수/음수)
  inspector: string;          // 검수자
}

// 재고 조정 팝업용 품목 아이템
export interface InventoryAdjustmentItem {
  id: string;
  lotNo: string;              // 로트번호
  itemCode: string;           // 품목코드
  itemType: string;           // 품목유형
  itemName: string;           // 품목명
  specification: string;      // 규격
  unit: string;               // 단위
  stockQty: number;           // 재고량
  adjustmentQty?: number;     // 증감 수량
}

// 검사 대상 아이템
export interface InspectionTarget {
  id: string;
  orderNo: string;
  supplier: string;
  qty: string;
}

// 검사 항목
export interface InspectionCheckItem {
  id: string;
  name: string;           // 검사항목
  specification: string;  // 규격
  method: string;         // 검사방법
  judgment: '적' | '부적' | '';  // 판정
  remark?: string;        // 비고
}

// 검사 등록 폼 데이터
export interface InspectionFormData {
  targetId: string;       // 검사 대상 ID
  inspectionDate: string; // 검사일
  inspector: string;      // 검사자
  lotNo: string;          // LOT번호
  items: InspectionCheckItem[];
  opinion?: string;       // 종합 의견
}

// 입고처리 폼 데이터
export interface ReceivingProcessFormData {
  receivingLot: string;      // 입고LOT *
  supplierLot?: string;      // 공급업체LOT
  receivingQty: number;      // 입고수량 *
  receivingLocation?: string; // 입고위치 (선택)
  remark?: string;           // 비고
}

// 통계 데이터
export interface ReceivingStats {
  receivingPendingCount: number;   // 입고대기
  receivingCompletedCount: number; // 입고완료
  inspectionPendingCount: number;  // 검사 중
  inspectionCompletedCount: number; // 검사완료
  // 기존 필드 (하위 호환)
  shippingCount?: number;          // 배송중
  todayReceivingCount?: number;    // 금일입고
}

// 필터 탭
export interface FilterTab {
  key: 'all' | 'receiving_pending' | 'completed';
  label: string;
  count: number;
}