/**
 * Product Detail - Voucher Discount Recalculation
 * 
 * Handles dynamic voucher discount recalculation when variant price changes
 * Supports both PERCENTAGE and FIXED_AMOUNT voucher types
 */

(function() {
  'use strict';

  /**
   * Calculate voucher discount based on type and price
   * 
   * @param {string} type - Voucher type: 'PERCENTAGE' or 'FIXED_AMOUNT'
   * @param {number} value - Voucher value (percentage or fixed amount)
   * @param {number} price - Current variant price
   * @param {number} maxDiscount - Maximum discount for percentage vouchers (0 = no limit)
   * @return {number} Calculated discount amount
   */
  function calculateVoucherDiscount(type, value, price, maxDiscount) {
    if (type === 'PERCENTAGE') {
      // Calculate percentage discount
      let discount = (price * value) / 100;
      
      // Apply max discount cap if set
      if (maxDiscount > 0 && discount > maxDiscount) {
        discount = maxDiscount;
      }
      
      return Math.round(discount);
    } else {
      // FIXED_AMOUNT - discount doesn't change with price
      return Math.round(value);
    }
  }

  /**
   * Format number as Rupiah without 'Rp' prefix
   * 
   * @param {number} num - Number to format
   * @return {string} Formatted number (e.g., "20.000")
   */
  function formatNumber(num) {
    return Math.round(num).toString().replace(/\B(?=(\d{3})+(?!\d))/g, '.');
  }

  /**
   * Update voucher button discount label
   * 
   * @param {number} newPrice - New variant price
   */
  function updateVoucherDiscount(newPrice) {
    const voucherBtn = document.getElementById('btn-buy-voucher');
    if (!voucherBtn) return;

    // Get voucher data from button attributes
    const voucherType = voucherBtn.dataset.voucherType;
    const voucherValue = parseFloat(voucherBtn.dataset.voucherValue) || 0;
    const voucherMax = parseFloat(voucherBtn.dataset.voucherMax) || 0;

    if (!voucherType || voucherValue === 0) return;

    // Calculate new discount
    const newDiscount = calculateVoucherDiscount(voucherType, voucherValue, newPrice, voucherMax);

    // Update the discount label
    const saveLabel = voucherBtn.querySelector('.bv-save');
    if (saveLabel) {
      saveLabel.textContent = '-Rp' + formatNumber(newDiscount);
    }

    // Also update mobile FAB voucher display if exists
    updateMobileFabVoucher(newDiscount);
  }

  /**
   * Update mobile FAB voucher value
   * 
   * @param {number} discountAmount - New discount amount
   */
  function updateMobileFabVoucher(discountAmount) {
    const fab = document.getElementById('pd-mobile-fab');
    if (fab) {
      fab.dataset.voucherValue = discountAmount.toString();
    }
  }

  /**
   * Listen to variant change events and recalculate discount
   */
  function initVoucherRecalculation() {
    window.addEventListener('pd-variant-changed', function(e) {
      const detail = e.detail || {};
      const newPrice = detail.price || 0;

      if (newPrice > 0) {
        updateVoucherDiscount(newPrice);
      }
    });
  }

  // Initialize when DOM is ready
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', initVoucherRecalculation);
  } else {
    initVoucherRecalculation();
  }

})();
