import { productPath } from './seo';
import { isVariantAvailable, type StockAwareVariant } from './variantStock';

export function getDefaultProductVariant<T extends StockAwareVariant>(variants: T[], sampleStockMl: number): T | undefined {
  return variants.find((variant) => variant.kind === 'BOTTLE' && isVariantAvailable(variant, sampleStockMl))
    ?? variants.find((variant) => isVariantAvailable(variant, sampleStockMl))
    ?? variants[0];
}

export function hasValidOfferPrice(variant: { currentPrice: number }): boolean {
  return Number.isFinite(Number(variant.currentPrice)) && Number(variant.currentPrice) > 0;
}

export function productVariantUrl(slug: string, variant: { id: number; sku?: string }): string {
  return `${productPath(slug)}?variant=${encodeURIComponent(variant.sku || `VYS-${variant.id}`)}`;
}

export function getOfferPricing(variant: { currentPrice: number; volumeMl: number }) {
  const price = Number(Number(variant.currentPrice).toFixed(2));
  if (!Number.isFinite(variant.volumeMl) || variant.volumeMl <= 0) {
    return { price, priceCurrency: 'CZK' };
  }

  // The price is for the whole variant; referenceQuantity describes its volume,
  // not a recalculated price per 100 ml (Google Merchant listing specification).
  return {
    priceSpecification: {
      '@type': 'UnitPriceSpecification',
      price,
      priceCurrency: 'CZK',
      referenceQuantity: {
        '@type': 'QuantitativeValue',
        value: String(variant.volumeMl),
        unitCode: 'ML',
        valueReference: {
          '@type': 'QuantitativeValue',
          value: '100',
          unitCode: 'ML',
        },
      },
    },
  };
}
