export type VariantKind = 'SAMPLE' | 'BOTTLE' | 'OTHER';

export interface StockAwareVariant {
  volumeMl: number;
  kind?: VariantKind;
  stock?: number;
}

export function getVariantAvailableQuantity(
  variant: StockAwareVariant,
  sampleStockMl: number,
): number {
  if (variant.kind === 'BOTTLE' || variant.kind === 'OTHER') {
    return Math.max(0, Math.floor(Number(variant.stock) || 0));
  }

  const volumeMl = Math.max(0, Number(variant.volumeMl) || 0);
  if (volumeMl === 0) return 0;
  return Math.max(0, Math.floor((Number(sampleStockMl) || 0) / volumeMl));
}

export function isVariantAvailable(variant: StockAwareVariant, sampleStockMl: number): boolean {
  return getVariantAvailableQuantity(variant, sampleStockMl) > 0;
}

export function isVariantLowStock(variant: StockAwareVariant, sampleStockMl: number): boolean {
  return getVariantAvailableQuantity(variant, sampleStockMl) === 1;
}

export function getVariantKindLabel(kind?: VariantKind): string {
  if (kind === 'BOTTLE') return 'Celý flakon';
  if (kind === 'OTHER') return 'Ostatní';
  return 'Odstřik';
}
