export interface CurrencyConversion {
  amount: number;
  original_amount: number;
  currency_iso: string;
  original_currency_iso: string;
  exchange_rate: number;
}

export interface PaymentCalculation extends CurrencyConversion {
  gived_amount: number;
  original_gived_amount: number;
}

export interface WholesaleLevel {
  dw_product_id: number;
  wholesale_level_id: number;
  name: string;
  description: string;
  price: number;
  quantity_min: number;
  quantity_max: number;
  branch_id: number;
  company_id: number;
}

export interface SaleTotals {
  subtotal: number;
  total: number;
  original_subtotal?: number;
  original_total?: number;
  change: number;
  debt: number;
}

export interface Sale {
  id: string | number;
  total: number;
  currency_iso: string;
  return_items: SaleItem[];
  credit_memos?: CreditMemo[];
}


export interface SaleItem {
  product_id: string | number;
  quantity: number | null; 
  sale_product_quantity: number; 
  price: number;
  name?: string;
  code?: string;
  sku?: string;
  refund_amount?: number;
}

export interface CreditMemo {
  id: string | number;
  sale_id: string | number;
  total_refund: number;
  return_items: SaleItem[];
  timestamp?: Date;
}

export interface RefundCalculation {
  valid: boolean;
  message?: string,
  total_refund: number;
  return_items: {
    product_id: string | number;
    quantity: number | null;
    refund_amount: number;
    price: number;
    name?: string;
    code?: string;
    sku?: string;
  }[];
  remaining_sale_total: number;
  previous_refunds_total: number;
  input_type: 'items_full_refund' | 'items_with_custom_amount' | 'amount_only';
}

export interface RefundOptions {
  input_type: 'items_full_refund' | 'items_with_custom_amount' | 'amount_only';
  requested_refund_amount?: number;
  decimal_precision: number;
}