/**
 * 출하관리 타입 정의
 */

// 출하 상태
export type ShipmentStatus =
  | 'scheduled'         // 출고예정
  | 'ready'             // 출하대기
  | 'shipping'          // 배송중
  | 'completed';        // 배송완료

// 상태 라벨
export const SHIPMENT_STATUS_LABELS: Record<ShipmentStatus, string> = {
  scheduled: '출고예정',
  ready: '출하대기',
  shipping: '배송중',
  completed: '배송완료',
};

// 상태 스타일
export const SHIPMENT_STATUS_STYLES: Record<ShipmentStatus, string> = {
  scheduled: 'bg-gray-100 text-gray-800',
  ready: 'bg-yellow-100 text-yellow-800',
  shipping: 'bg-blue-100 text-blue-800',
  completed: 'bg-green-100 text-green-800',
};

// 출고 우선순위
export type ShipmentPriority = 'urgent' | 'normal' | 'low';

export const PRIORITY_LABELS: Record<ShipmentPriority, string> = {
  urgent: '긴급',
  normal: '보통',
  low: '낮음',
};

export const PRIORITY_STYLES: Record<ShipmentPriority, string> = {
  urgent: 'bg-red-100 text-red-800',
  normal: 'bg-gray-100 text-gray-800',
  low: 'bg-blue-100 text-blue-800',
};

// 배송방식
export type DeliveryMethod = 'pickup' | 'direct' | 'logistics';

export const DELIVERY_METHOD_LABELS: Record<DeliveryMethod, string> = {
  pickup: '상차',
  direct: '직접배차',
  logistics: '물류사',
};

// 출하 목록 아이템
export interface ShipmentItem {
  id: string;
  shipmentNo: string;        // 출고번호
  lotNo: string;             // 로트번호
  scheduledDate: string;     // 출고예정일
  status: ShipmentStatus;    // 상태
  priority: ShipmentPriority; // 우선순위
  deliveryMethod: DeliveryMethod; // 배송방식
  customerName: string;      // 발주처
  siteName: string;          // 현장명
  manager?: string;          // 담당
  canShip: boolean;          // 출하가능
  depositConfirmed: boolean; // 입금확인
  invoiceIssued: boolean;    // 세금계산서
  deliveryTime?: string;     // 납기(수배시간)
}

// 출고 품목
export interface ShipmentProduct {
  id: string;
  no: number;
  itemCode: string;          // 품목코드
  itemName: string;          // 품목명
  floorUnit: string;         // 층/M호
  specification: string;     // 규격
  quantity: number;          // 수량
  lotNo: string;             // LOT번호
}

// 출하 상세 정보
export interface ShipmentDetail {
  id: string;
  shipmentNo: string;        // 출고번호
  lotNo: string;             // 로트번호
  scheduledDate: string;     // 출고예정일
  status: ShipmentStatus;    // 출고상태
  priority: ShipmentPriority; // 출고 우선순위
  deliveryMethod: DeliveryMethod; // 배송방식
  depositConfirmed: boolean; // 입금확인
  invoiceIssued: boolean;    // 세금계산서
  customerGrade: string;     // 거래처 등급
  canShip: boolean;          // 출하가능
  loadingManager?: string;   // 상차담당자
  loadingCompleted?: string; // 상차완료
  registrant?: string;       // 등록자

  // 발주처/배송 정보
  customerName: string;      // 발주처
  siteName: string;          // 현장명
  deliveryAddress: string;   // 배송주소
  receiver?: string;         // 인수자
  receiverContact?: string;  // 연락처

  // 출고 품목
  products: ShipmentProduct[];

  // 배차 정보
  logisticsCompany?: string; // 물류사
  vehicleTonnage?: string;   // 차량 톤수
  shippingCost?: number;     // 운송비

  // 차량/운전자 정보
  vehicleNo?: string;        // 차량번호
  driverName?: string;       // 운전자
  driverContact?: string;    // 운전자 연락처

  remarks?: string;          // 비고
}

// 출하 등록 폼 데이터
export interface ShipmentCreateFormData {
  lotNo: string;             // 로트번호 *
  scheduledDate: string;     // 출고예정일 *
  priority: ShipmentPriority; // 출고 우선순위 *
  deliveryMethod: DeliveryMethod; // 배송방식 *
  logisticsCompany?: string; // 물류사
  vehicleTonnage?: string;   // 차량 톤수(물량)
  loadingTime?: string;      // 상차시간(입차예정)
  loadingManager?: string;   // 상차담당자
  remarks?: string;          // 비고
}

// 출하 수정 폼 데이터
export interface ShipmentEditFormData {
  scheduledDate: string;     // 출고예정일 *
  priority: ShipmentPriority; // 출고 우선순위 *
  deliveryMethod: DeliveryMethod; // 배송방식 *
  loadingManager?: string;   // 상차담당자
  logisticsCompany?: string; // 물류사
  vehicleTonnage?: string;   // 차량 톤수
  vehicleNo?: string;        // 차량번호
  shippingCost?: number;     // 운송비
  driverName?: string;       // 운전자명
  driverContact?: string;    // 운전자 연락처
  expectedArrival?: string;  // 입차예정시간
  confirmedArrival?: string; // 입차확정시간
  changeReason: string;      // 변경 사유 *
  remarks?: string;          // 비고
}

// 통계 데이터
export interface ShipmentStats {
  todayShipmentCount: number;    // 당일 출하
  scheduledCount: number;        // 출고 대기
  shippingCount: number;         // 배송중
  urgentCount: number;           // 긴급 출하
}

// 필터 탭
export interface ShipmentFilterTab {
  key: 'all' | 'scheduled' | 'ready' | 'shipping' | 'completed' | 'calendar';
  label: string;
  count: number;
}

// LOT 선택 옵션 (등록 시)
export interface LotOption {
  value: string;
  label: string;
  customerName: string;
  siteName: string;
  deliveryAddress: string;
}

// 물류사 선택 옵션
export interface LogisticsOption {
  value: string;
  label: string;
}

// 차량 톤수 선택 옵션
export interface VehicleTonnageOption {
  value: string;
  label: string;
}