/**
 * Heritage Voice — QR Code Generation (Admin CMS)
 * Thay thế toàn bộ logic tạo QR trong admin panel bằng đoạn này.
 *
 * Cũ (KHÔNG dùng nữa):
 *   new QRCode(el, { text: 'https://tads.ctv.hanoi.vn/detail.html?site=' + uuid })
 *
 * Mới:
 *   await renderQRCode(el, 'site', uuid)
 *   await renderQRCode(el, 'partner', uuid)
 *   await renderQRCode(el, 'tour', uuid)
 */

const QR_API = 'https://tads.ctv.hanoi.vn/api/qr/for';

/**
 * Render QR code cho một entity.
 * Auto-tạo code nếu chưa có, cache vào dataset.
 *
 * @param {HTMLElement} container  - div sẽ chứa QR image
 * @param {'site'|'partner'|'tour'} type
 * @param {string} uuid
 * @returns {Promise<string>} qr_url - URL đã dùng để tạo QR
 */
async function renderQRCode(container, type, uuid) {
  container.innerHTML = '<div style="padding:20px;text-align:center;color:#9B8B7A;font-size:13px;">⏳ Đang tạo mã QR...</div>';

  try {
    const token = localStorage.getItem('hv_token') || '';
    const res   = await fetch(`${QR_API}/${type}/${uuid}`, {
      headers: token ? { Authorization: 'Bearer ' + token } : {}
    });
    const data  = await res.json();

    if (!data.success) throw new Error(data.error || 'Lỗi tạo QR');

    const { code, qr_url, custom_slug, label } = data.data;
    const displayUrl = qr_url; // e.g. https://tads.ctv.hanoi.vn/p/SA3B7K

    // Xoá container và render QR
    container.innerHTML = '';

    // QR image (dùng QRCode.js đã load sẵn)
    const qrDiv = document.createElement('div');
    container.appendChild(qrDiv);

    new QRCode(qrDiv, {
      text:          displayUrl,
      width:         200,
      height:        200,
      colorDark:     '#3D2B1F',
      colorLight:    '#FFFFFF',
      correctLevel:  QRCode.CorrectLevel.M
    });

    // URL text + copy button
    container.insertAdjacentHTML('beforeend', `
      <div style="margin-top:10px;text-align:center;">
        <div style="font-size:12px;color:#9B8B7A;margin-bottom:4px;">Mã: <strong style="color:#3D2B1F;letter-spacing:1px;">${code}</strong></div>
        <div style="font-size:11px;color:#9B8B7A;word-break:break-all;margin-bottom:8px;">${displayUrl}</div>
        <div style="display:flex;gap:6px;justify-content:center;flex-wrap:wrap;">
          <button onclick="copyQRUrl('${displayUrl}', this)"
            style="padding:6px 14px;border:1.5px solid #D4820A;background:#FEF3DC;color:#D4820A;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;">
            📋 Copy link
          </button>
          <button onclick="downloadQR('${code}', '${label || type}')"
            style="padding:6px 14px;border:1.5px solid #3D2B1F;background:#3D2B1F;color:#fff;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;">
            ⬇️ Tải QR
          </button>
          ${custom_slug ? '' : `
          <button onclick="setCustomSlug('${code}')"
            style="padding:6px 14px;border:1.5px solid #E8DDD0;background:#fff;color:#7A5C3A;border-radius:8px;font-size:12px;font-weight:700;cursor:pointer;font-family:inherit;">
            ✏️ Đặt slug
          </button>`}
        </div>
      </div>
    `);

    return displayUrl;

  } catch (e) {
    container.innerHTML = `<div style="padding:20px;text-align:center;color:#C0392B;font-size:13px;">❌ Lỗi tạo QR: ${e.message}</div>`;
    return null;
  }
}

/** Copy URL vào clipboard */
function copyQRUrl(url, btn) {
  navigator.clipboard?.writeText(url).then(() => {
    const orig = btn.textContent;
    btn.textContent = '✅ Đã copy!';
    setTimeout(() => btn.textContent = orig, 2000);
  });
}

/** Download QR thành file PNG */
function downloadQR(code, label) {
  const canvas = document.querySelector('canvas');
  if (!canvas) return;
  const link    = document.createElement('a');
  link.download = `QR-${code}-${label.replace(/\s+/g, '-')}.png`;
  link.href     = canvas.toDataURL('image/png');
  link.click();
}

/** Đặt custom slug cho QR code */
async function setCustomSlug(code) {
  const slug = prompt('Nhập slug ngắn gọn (VD: ho-hoan-kiem):\n(Chỉ dùng chữ thường, số và dấu gạch ngang)');
  if (!slug) return;
  if (!/^[a-z0-9-]+$/.test(slug)) { alert('Slug chỉ được dùng chữ thường, số và dấu -'); return; }

  const token = localStorage.getItem('hv_token') || '';
  try {
    const res  = await fetch(`https://tads.ctv.hanoi.vn/api/qr/${code}`, {
      method:  'PUT',
      headers: { 'Content-Type': 'application/json', Authorization: 'Bearer ' + token },
      body:    JSON.stringify({ custom_slug: slug })
    });
    const data = await res.json();
    if (data.success) {
      alert(`✅ Slug đã được đặt!\nURL mới: https://tads.ctv.hanoi.vn/p/${slug}`);
      location.reload();
    } else {
      alert('❌ ' + (data.error || 'Slug có thể đã được dùng'));
    }
  } catch (e) { alert('Lỗi kết nối'); }
}
