/**
 * 단가관리 타입 정의
 */


// ===== 단가 리비전 =====

/** 단가 수정 이력 */
export interface PricingRevision {
  revisionNumber: number;
  revisionDate: string;
  revisionBy: string;
  revisionReason?: string;
  previousData: PricingData;
}

// ===== 단가 데이터 =====

/** 단가 상태 */
export type PricingStatus = 'draft' | 'active' | 'inactive' | 'finalized';

/** 반올림 규칙 */
export type RoundingRule = 'round' | 'ceil' | 'floor';

/** 단가 데이터 인터페이스 */
export interface PricingData {
  id: string;
  itemId: string;
  itemCode: string;
  itemName: string;
  itemType: string;
  specification?: string;
  unit: string;

  // 단가 정보
  effectiveDate: string;      // 적용일
  receiveDate?: string;       // 입고일
  author?: string;            // 작성자
  purchasePrice?: number;     // 매입단가 (입고가)
  processingCost?: number;    // 가공비
  loss?: number;              // LOSS(%)
  roundingRule?: RoundingRule; // 반올림 규칙
  roundingUnit?: number;      // 반올림 단위
  marginRate?: number;        // 마진율(%)
  salesPrice?: number;        // 판매단가
  supplier?: string;          // 공급업체
  note?: string;              // 비고

  // 리비전 관리
  currentRevision: number;
  isFinal: boolean;
  revisions?: PricingRevision[];
  finalizedDate?: string;
  finalizedBy?: string;
  status: PricingStatus;

  // 메타데이터
  createdAt: string;
  createdBy: string;
  updatedAt?: string;
  updatedBy?: string;
}

// ===== 품목 정보 (등록 시 전달) =====

/** 품목 기본 정보 */
export interface ItemInfo {
  id: string;
  itemCode: string;
  itemName: string;
  itemType: string;
  specification?: string;
  unit: string;
}

// ===== 폼 데이터 =====

/** 단가 폼 입력 데이터 */
export interface PricingFormData {
  effectiveDate: string;
  receiveDate: string;
  author: string;
  purchasePrice: number;
  processingCost: number;
  loss: number;
  roundingRule: RoundingRule;
  roundingUnit: number;
  marginRate: number;
  salesPrice: number;
  supplier: string;
  note: string;
  unit: string;
}

// ===== 통계 =====

/** 단가 통계 */
export interface PricingStats {
  totalItems: number;
  registeredCount: number;
  notRegisteredCount: number;
  finalizedCount: number;
}

// ===== 목록 아이템 (테이블용) =====

/** 목록 표시용 데이터 */
export interface PricingListItem {
  id: string;
  itemId: string;
  itemCode: string;
  itemName: string;
  itemType: string; // FG, PT, SM, RM, CS 등 (API 등록 시 item_type_code로 사용)
  specification?: string;
  unit: string;
  purchasePrice?: number;
  processingCost?: number;
  salesPrice?: number;
  marginRate?: number;
  effectiveDate?: string;
  status: PricingStatus | 'not_registered';
  currentRevision: number;
  isFinal: boolean;
}

// ===== 유틸리티 타입 =====

/** 품목 유형 */
export type ItemType = 'FG' | 'PT' | 'SM' | 'RM' | 'CS' | 'BENDING';

/** 품목 유형 라벨 맵 */
export const ITEM_TYPE_LABELS: Record<ItemType, string> = {
  FG: '제품',
  PT: '부품',
  SM: '부자재',
  RM: '원자재',
  CS: '소모품',
  BENDING: '절곡물',
};

/** 품목 유형 색상 맵 */
export const ITEM_TYPE_COLORS: Record<ItemType, { bg: string; text: string; border: string }> = {
  FG: { bg: 'bg-purple-50', text: 'text-purple-700', border: 'border-purple-200' },
  PT: { bg: 'bg-orange-50', text: 'text-orange-700', border: 'border-orange-200' },
  SM: { bg: 'bg-cyan-50', text: 'text-cyan-700', border: 'border-cyan-200' },
  RM: { bg: 'bg-green-50', text: 'text-green-700', border: 'border-green-200' },
  CS: { bg: 'bg-gray-50', text: 'text-gray-700', border: 'border-gray-200' },
  BENDING: { bg: 'bg-blue-50', text: 'text-blue-700', border: 'border-blue-200' },
};

/** 단위 옵션 */
export const UNIT_OPTIONS = [
  { value: 'EA', label: 'EA (개)' },
  { value: 'SET', label: 'SET (세트)' },
  { value: 'KG', label: 'KG (킬로그램)' },
  { value: 'G', label: 'G (그램)' },
  { value: 'M', label: 'M (미터)' },
  { value: 'CM', label: 'CM (센티미터)' },
  { value: 'MM', label: 'MM (밀리미터)' },
  { value: 'L', label: 'L (리터)' },
  { value: 'ML', label: 'ML (밀리리터)' },
  { value: 'BOX', label: 'BOX (박스)' },
  { value: 'ROLL', label: 'ROLL (롤)' },
  { value: 'SHEET', label: 'SHEET (장)' },
];

/** 반올림 규칙 옵션 */
export const ROUNDING_RULE_OPTIONS = [
  { value: 'round', label: '반올림' },
  { value: 'ceil', label: '올림' },
  { value: 'floor', label: '내림' },
];

/** 반올림 단위 옵션 */
export const ROUNDING_UNIT_OPTIONS = [
  { value: 1, label: '1원 단위' },
  { value: 10, label: '10원 단위' },
  { value: 100, label: '100원 단위' },
  { value: 1000, label: '1,000원 단위' },
  { value: 10000, label: '10,000원 단위' },
];