/**
 * 採購單相關型別定義
 */

export type PurchaseOrderStatus =
  | "draft"           // 草稿
  | "review_pending"  // 待審核
  | "processing"      // 處理中
  | "shipping"        // 運送中
  | "pending_confirm" // 待確認
  | "completed"       // 已完成
  | "rejected";       // 已退回

export type RequesterType = "store" | "warehouse"; // 申請人類型

export type PaymentMethod = "cash" | "bank_transfer" | "credit_card" | "check"; // 付款方式

export type InvoiceType = "duplicate" | "triplicate" | "electronic"; // 發票類型

export interface PurchaseOrderItem {
  productId: string;
  productName: string;
  quantity: number;
  unit: string;
  unitPrice: number;
  previousPrice?: number;
  subtotal: number;
}

// 審核資訊
export interface ReviewInfo {
  reviewedBy: string;      // 審核人
  reviewedAt: string;      // 審核時間
  rejectionReason?: string; // 退回原因（僅退回時）
}

// 發票資訊
export interface InvoiceInfo {
  invoiceNumber: string;     // 發票號碼
  invoiceAmount: number;     // 發票金額
  invoiceDate: string;       // 發票日期
  invoiceType: InvoiceType;  // 發票類型
  companyName?: string;      // 公司抬頭（三聯式）
  taxId?: string;            // 統一編號（三聯式）
}

// 付款資訊
export interface PaymentInfo {
  paymentMethod: PaymentMethod; // 付款方式
  paymentDate: string;          // 付款日期
  actualAmount: number;         // 實際付款金額
  paidBy: string;               // 付款人
  paidAt: string;               // 付款記錄時間
  hasInvoice: boolean;          // 是否有發票
  invoice?: InvoiceInfo;        // 發票資訊（如果有）
}

export interface PurchaseOrder {
  id: string;
  poNumber: string;
  supplierId: string;
  supplierName: string;
  expectedDate: string;
  status: PurchaseOrderStatus;
  items: PurchaseOrderItem[];
  totalAmount: number;
  createdAt: string;
  createdBy: string;      // 申請人（採購人）
  requesterType: RequesterType; // 申請人類型（門市/倉庫）
  requesterId: string;    // 申請單位 ID
  requesterName: string;  // 申請單位名稱
  department: string;     // 申請單位（保留相容性）
  notes?: string;
  reviewInfo?: ReviewInfo; // 審核資訊
  paymentInfo?: PaymentInfo; // 付款資訊
}

export interface Supplier {
  id: string;
  name: string;
  contact?: string;
  phone?: string;
  email?: string;
  commonProducts: CommonProduct[];
}

export interface CommonProduct {
  productId: string;
  productName: string;
  unit: string;
  lastPrice: number;
}

export interface InspectionItem extends PurchaseOrderItem {
  receivedQuantity: number;
  damagedQuantity: number; // 保留欄位以維持相容性，但不再使用
  shortageQuantity: number;
  issueType?: "shortage" | "none";
  issueNote?: string;
}
