/**
 * 재고현황 타입 정의
 *
 * Item 모델 기준 (MATERIAL_TYPES: SM, RM, CS)
 */

// 품목유형 (Item 모델의 MATERIAL_TYPES)
// API에서는 'RM' | 'SM' | 'CS' 형태를 사용하지만, mock 데이터에서는 legacy 값도 지원
export type ItemType = 'RM' | 'SM' | 'CS' | 'PT' | 'FG' | 'SF' | 'raw_material' | 'bent_part' | 'purchased_part' | 'sub_material' | 'consumable';

// 품목유형 라벨
export const ITEM_TYPE_LABELS: Partial<Record<ItemType, string>> = {
  RM: '원자재',
  SM: '부자재',
  CS: '소모품',
  PT: '부분품(재공품)',
  FG: '완제품',
  SF: '반제품',
  raw_material: '원자재',
  bent_part: '부분품(재공품)',
  purchased_part: '완제품',
  sub_material: '부자재',
  consumable: '소모품',
};

// 품목유형 스타일 (뱃지용)
export const ITEM_TYPE_STYLES: Partial<Record<ItemType, string>> = {
  RM: 'bg-blue-100 text-blue-800',
  SM: 'bg-green-100 text-green-800',
  CS: 'bg-orange-100 text-orange-800',
  PT: 'bg-purple-100 text-purple-800',
  FG: 'bg-teal-100 text-teal-800',
  SF: 'bg-indigo-100 text-indigo-800',
  raw_material: 'bg-blue-100 text-blue-800',
  bent_part: 'bg-purple-100 text-purple-800',
  purchased_part: 'bg-teal-100 text-teal-800',
  sub_material: 'bg-green-100 text-green-800',
  consumable: 'bg-orange-100 text-orange-800',
};

// 재고 상태
export type StockStatusType = 'normal' | 'low' | 'out' | 'over';

// 재고 상태 라벨
export const STOCK_STATUS_LABELS: Record<StockStatusType, string> = {
  normal: '정상',
  low: '부족',
  out: '없음',
  over: '초과',
};

// LOT 상태
export type LotStatusType = 'available' | 'reserved' | 'used';

export const LOT_STATUS_LABELS: Record<LotStatusType, string> = {
  available: '사용가능',
  reserved: '예약됨',
  used: '사용완료',
};

// 재고 목록 아이템 (Item 기준 + Stock 정보)
export interface StockItem {
  id: string;
  itemCode: string;           // Item.code
  itemName: string;           // Item.name
  itemType: ItemType;         // Item.item_type (RM, SM, CS)
  specification: string;      // 규격 (Item.specification 또는 attributes)
  unit: string;               // Item.unit
  calculatedQty: number;      // 계산 재고량 (Stock.calculated_qty)
  actualQty: number;          // 실제 재고량 (Stock.actual_qty)
  stockQty: number;           // Stock.stock_qty (없으면 0)
  safetyStock: number;        // Stock.safety_stock (없으면 0)
  maxStock?: number;           // Stock.max_stock (없으면 0, 적정재고 상한)
  wipQty: number;             // 재공품 수량 (Stock.wip_qty, 없으면 0)
  lotCount: number;           // Stock.lot_count (없으면 0)
  lotDaysElapsed: number;     // Stock.days_elapsed (없으면 0)
  status: StockStatusType | null;  // Stock.status (없으면 null)
  useStatus: 'active' | 'inactive';  // 사용/미사용 상태
  lastTransactionDate: string; // 최종 입출고 일자 (last_receipt_date, last_issue_date 중 최신)
  location: string;           // Stock.location (없으면 '-')
  hasStock: boolean;          // Stock 데이터 존재 여부
}

// 사용 상태 라벨
export const USE_STATUS_LABELS: Record<'active' | 'inactive', string> = {
  active: '사용',
  inactive: '미사용',
};

// LOT별 상세 재고
export interface LotDetail {
  id: string;
  fifoOrder: number;          // FIFO 순서
  lotNo: string;              // LOT번호
  receiptDate: string;        // 입고일
  daysElapsed: number;        // 경과일
  supplier: string;           // 공급업체
  poNumber: string;           // 발주번호
  qty: number;                // 수량
  unit: string;               // 단위
  location: string;           // 위치
  status: LotStatusType;      // 상태
}

// 재고 상세 정보 (Item 기준)
export interface StockDetail {
  // 기본 정보 (Item)
  id: string;
  itemCode: string;           // Item.code
  itemName: string;           // Item.name
  itemType: ItemType;         // Item.item_type (RM, SM, CS)
  category: string;           // Item.category?.name
  specification: string;      // Item.attributes 또는 description
  unit: string;               // Item.unit

  // 재고 현황 (Stock - 없으면 기본값)
  currentStock: number;       // Stock.stock_qty
  safetyStock: number;        // Stock.safety_stock
  maxStock?: number;           // Stock.max_stock (적정재고 상한)
  location: string;           // Stock.location
  lotCount: number;           // Stock.lot_count
  lastReceiptDate: string;    // Stock.last_receipt_date
  status: StockStatusType | null;  // Stock.status
  hasStock: boolean;          // Stock 데이터 존재 여부

  // LOT별 상세 재고
  lots: LotDetail[];
}

// 통계 데이터
export interface StockStats {
  totalItems: number;         // 전체 자재 품목 수 (Item 기준)
  normalCount: number;        // 정상 재고 수
  lowCount: number;           // 재고 부족 수
  outCount: number;           // 재고 없음 수
  noStockCount: number;       // 재고 정보 없는 품목 수
}

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