/**
 * Модуль редактирования товара в корзине POS-терминала
 * Отвечает за открытие модалки и сохранение изменений
 */

(function() {
  'use strict';

  let editingCartKey = null;
  let basePrice = 0;

  /**
   * Округление цены до 2 знаков
   */
  function roundPrice(value) {
    if (value === null || value === undefined || isNaN(value)) return '0.00';
    return (Number(value)).toFixed(2);
  }

  /**
   * Открытие модалки редактирования
   * @param {string} cartKey - ключ товара в корзине
   */
  function openModal(cartKey) {
    const item = window.cart?.get(cartKey);
    if (!item) {
      console.error('CartItemEditor: Item not found for key:', cartKey);
      return;
    }

    // Проверяем наличие модалки
    const modalEl = document.getElementById('editCartItemModal');
    if (!modalEl) {
      console.error('CartItemEditor: Modal element not found!');
      return;
    }

    editingCartKey = cartKey;
    basePrice = parseFloat(item.price) || 0;

    // Проверяем, является ли товар витринным комплектом
    const isShowcaseKit = item.type === 'showcase_kit';

    // Заполнение полей
    document.getElementById('editModalProductName').textContent = item.name || '—';

    // Используем formatMoney из terminal.js
    const fmtMoney = typeof formatMoney === 'function' ? formatMoney : (v) => Number(v).toFixed(2);
    document.getElementById('editModalBasePrice').textContent = fmtMoney(basePrice) + ' руб.';

    document.getElementById('editModalPrice').value = roundPrice(basePrice);
    document.getElementById('editModalQuantity').value = item.qty || 1;

    // Для витринных комплектов блокируем изменение количества
    const qtyInput = document.getElementById('editModalQuantity');
    const qtyHint = document.getElementById('editModalQtyHint');
    if (isShowcaseKit) {
      qtyInput.disabled = true;
      qtyHint.style.display = 'block';
    } else {
      qtyInput.disabled = false;
      qtyHint.style.display = 'none';
    }

    // Бейдж единицы измерения
    const unitBadge = document.getElementById('editModalUnitBadge');
    if (item.unit_name) {
      unitBadge.textContent = item.unit_name;
      unitBadge.style.display = 'inline-block';
    } else {
      unitBadge.style.display = 'none';
    }

    updateTotal();

    // Показ модалки
    const modal = new bootstrap.Modal(modalEl);
    modal.show();

    console.log('CartItemEditor: Modal opened for', item.name);
  }

  /**
   * Обновление суммы в модалке
   */
  function updateTotal() {
    const price = parseFloat(document.getElementById('editModalPrice').value) || 0;
    const qty = parseFloat(document.getElementById('editModalQuantity').value) || 0;

    const fmtMoney = typeof formatMoney === 'function' ? formatMoney : (v) => Number(v).toFixed(2);
    document.getElementById('editModalTotal').textContent = fmtMoney(price * qty) + ' руб.';

    // Индикатор изменения цены
    const warning = document.getElementById('editModalPriceWarning');
    if (Math.abs(price - basePrice) > 0.01) {
      warning.style.display = 'block';
    } else {
      warning.style.display = 'none';
    }
  }

  /**
   * Сохранение изменений
   */
  function saveChanges() {
    if (!editingCartKey) return;

    const newPrice = parseFloat(document.getElementById('editModalPrice').value) || 0;
    const newQty = parseFloat(document.getElementById('editModalQuantity').value) || 1;

    const item = window.cart?.get(editingCartKey);
    if (item) {
      // Используем roundQuantity из terminal.js
      const rndQty = typeof roundQuantity === 'function' ? roundQuantity : (v, d) => Math.round(v * Math.pow(10, d)) / Math.pow(10, d);

      const isShowcaseKit = item.type === 'showcase_kit';

      item.price = newPrice;
      // Для витринных комплектов не меняем количество
      if (!isShowcaseKit) {
        item.qty = rndQty(newQty, 3);
      }
      item.price_overridden = Math.abs(newPrice - basePrice) > 0.01;

      window.cart.set(editingCartKey, item);

      // Перерисовка корзины
      if (typeof renderCart === 'function') {
        renderCart();
      }

      // Сохранение на сервере
      if (typeof saveCartToServer === 'function') {
        saveCartToServer();
      }

      console.log('CartItemEditor: Changes saved for', item.name);
    }

    // Закрытие модалки
    const modalEl = document.getElementById('editCartItemModal');
    const modal = bootstrap.Modal.getInstance(modalEl);
    if (modal) modal.hide();
  }

  /**
   * Сброс состояния модалки
   */
  function reset() {
    editingCartKey = null;
    basePrice = 0;
  }

  /**
   * Инициализация модуля
   */
  function init() {
    const priceInput = document.getElementById('editModalPrice');
    const qtyInput = document.getElementById('editModalQuantity');
    const confirmBtn = document.getElementById('confirmEditCartItem');

    if (!priceInput || !confirmBtn) {
      console.warn('CartItemEditor: Required elements not found, deferring init...');
      // Повторная попытка через короткое время
      setTimeout(init, 100);
      return;
    }

    console.log('CartItemEditor: Initialized successfully');

    // Обновление суммы при изменении полей
    priceInput.addEventListener('input', updateTotal);
    qtyInput.addEventListener('input', updateTotal);

    // Авто-выделение всего текста при фокусе
    priceInput.addEventListener('focus', function() {
      this.select();
    });
    qtyInput.addEventListener('focus', function() {
      this.select();
    });

    // Кнопка сохранения
    confirmBtn.addEventListener('click', saveChanges);

    // Сброс при закрытии модалки
    const modalEl = document.getElementById('editCartItemModal');
    modalEl.addEventListener('hidden.bs.modal', reset);

    // Enter для сохранения
    priceInput.addEventListener('keypress', function(e) {
      if (e.key === 'Enter') saveChanges();
    });
    qtyInput.addEventListener('keypress', function(e) {
      if (e.key === 'Enter') saveChanges();
    });
  }

  // Экспорт функций для использования из terminal.js
  window.CartItemEditor = {
    openModal: openModal,
    init: init
  };

  console.log('CartItemEditor: Module loaded');

  // Автоинициализация при загрузке
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();
