// ═══ Init ═══
window.addEventListener('DOMContentLoaded', () => {
  try {
    const parentParams = new URLSearchParams(window.parent.location.search);
    if (parentParams.has('p')) {
      currentPage = Math.max(0, parseInt(parentParams.get('p')) - 1) || 0;
    }
  } catch(e) {}
  
  loadOverview();
  loadFilters();
  loadProducts();
  // Enter to search
  document.getElementById('searchInput').addEventListener('keydown', e => {
    if (e.key === 'Enter') loadProducts();
  });
});

// ═══ Overview Stats ═══
async function loadOverview() {
  try {
    const res = await fetch(`${API}/overview`);
    const data = await res.json();
    if (data.status !== 'success') return;

    const totalSr  = data.total_sr  || 0;   // StarRocks: distinct magento_ref_code in catalog
    const hasDone  = data.has_desc  || 0;   // Postgres rows (per máu)
    const approved = data.approved  || 0;
    const pending  = data.pending   || 0;
    const missing  = Math.max(0, totalSr - hasDone); // never negative

    // Stat cards
    document.getElementById('statTotal').textContent = totalSr.toLocaleString();
    const subEl = document.getElementById('statTotalSub');
    if (subEl) subEl.textContent = `${hasDone.toLocaleString()} code đã có trong DB`;
    document.getElementById('statDone').textContent = hasDone.toLocaleString();
    document.getElementById('statApproved').textContent = approved.toLocaleString();
    document.getElementById('statPending').textContent = pending.toLocaleString();
    document.getElementById('statMissing').textContent = missing.toLocaleString();
    document.getElementById('statMissingClean').textContent = (data.missing_clean_desc || 0).toLocaleString();
    document.getElementById('statMissingTags').textContent = (data.missing_tags || 0).toLocaleString();
    document.getElementById('statHasClean').textContent = (data.has_clean_desc || 0).toLocaleString();
    document.getElementById('statMissingCleanSub').textContent =
      `Đã có ${(hasDone - (data.missing_clean_desc || 0)).toLocaleString()} / ${hasDone.toLocaleString()} bản có format sạch`;

    // Progress = approved / totalPg (not totalSr)
    const approveProgress = hasDone > 0 ? (approved / hasDone * 100).toFixed(1) : 0;
    document.getElementById('statProgress').textContent = approveProgress + '%';
    document.getElementById('progressFill').style.width = approveProgress + '%';
    document.getElementById('btnBatchTags').textContent = `Bơm Tags (Còn ${(data.missing_tags || 0).toLocaleString()} thiếu)`;
    const sizeEl = document.getElementById('statSizeGuide');
    if (sizeEl) sizeEl.textContent = (data.has_size_guide || 0).toLocaleString();
  } catch (e) { console.error('Overview error:', e); }
}

// ═══ Filters ═══
async function loadFilters() {
  try {
    const res = await fetch(`${API}/filters`);
    const data = await res.json();
    if (data.status !== 'success') return;
    const sel = document.getElementById('lineFilter');
    (data.product_lines || []).forEach(l => {
      const opt = document.createElement('option');
      opt.value = l.product_line_vn;
      opt.textContent = `${l.product_line_vn} (${l.cnt})`;
      sel.appendChild(opt);
    });
  } catch (e) {}
}

function resetFilters() {
  document.getElementById('searchInput').value = '';
  document.getElementById('statusFilter').value = '';
  document.getElementById('lineFilter').value = '';
  document.getElementById('tagsFilter').value = '';
  currentPage = 0;
  loadProducts();
}

// ═══════════════════════════════════════════════════
// ═══════════════════════════════════════════════════
let _directTagsPoller = null;

async function runTagsDirect() {
  const btn = document.getElementById('btnBatchTagsDirect');
  const box = document.getElementById('directTagsBox');
  let forceAll = false;

  try {
    const countRes = await fetch('/api/tags-direct/count-untagged');
    const countData = await countRes.json();
    const untagged = countData.untagged ?? '?';
    
    forceAll = confirm(`🏷️ Phát hiện ${untagged} sản phẩm chưa có tags.\n\nBạn muốn chạy TẤT CẢ sản phẩm (Re-tag đè lại toàn bộ) hay chỉ chạy những mã CÒN THIẾU?\n\n- Bấm OK để chạy TẤT CẢ (Re-tag toàn bộ)\n- Bấm Cancel để chỉ chạy ${untagged} mã thiếu`);
    
    if (!forceAll && untagged === 0) { 
        alert('🎉 Tất cả sản phẩm đã có tags rồi! (Nếu muốn re-tag thì bấm OK ở thông báo trước)'); 
        return; 
    }

    if (forceAll) {
        if (!confirm(`CẢNH BÁO: Việc này sẽ chạy lại AI cho TẤT CẢ sản phẩm và đè lên Tags cũ.\n\nTiếp tục?`)) return;
    }
  } catch (e) {
    if (!confirm('Không đếm được số SP. Bạn có muốn chạy thử?')) return;
  }

  btn.disabled = true;
  btn.innerHTML = '⏳ Đang khởi động...';

  try {
    const res = await fetch(`/api/tags-direct/run?force_all=${forceAll}`, { method: 'POST' });
    const data = await res.json();
    if (data.status === 'error') throw new Error(data.message);

    box.style.display = 'flex';
    document.getElementById('directTagsTitle').textContent = forceAll ? '🏷️ Direct Tagging (TẤT CẢ) đang chạy...' : '🏷️ Direct Tagging đang chạy...';
    _startDirectTagsPoller();
    btn.innerHTML = '⏳ Đang chạy...';
  } catch (e) {
    alert('❌ Lỗi khởi động: ' + e.message);
    btn.disabled = false;
    btn.innerHTML = '🏷️ Bơm Tags TOÀN BỘ (Direct)';
  }
}

function _startDirectTagsPoller() {
  if (_directTagsPoller) clearInterval(_directTagsPoller);
  _directTagsPoller = setInterval(_pollDirectTags, 1500);
}

async function _pollDirectTags() {
  try {
    const res = await fetch('/api/tags-direct/status');
    const s = await res.json();
    const box = document.getElementById('directTagsBox');
    const btn = document.getElementById('btnBatchTagsDirect');
    box.style.display = 'flex';

    document.getElementById('directTagsCount').textContent = `${s.done} / ${s.total}`;
    document.getElementById('directTagsCode').textContent = s.current_code || '—';
    document.getElementById('directTagsErrors').textContent = s.errors;
    document.getElementById('directTagsPct').textContent = `${s.percent || 0}%`;
    const pct = s.total > 0 ? (s.done / s.total * 100) : 0;
    document.getElementById('directTagsFill').style.width = pct + '%';

    if (!s.is_running) {
      clearInterval(_directTagsPoller);
      _directTagsPoller = null;
      document.getElementById('directTagsTitle').textContent =
        `✅ Xong! Đã gán tags cho ${s.done}/${s.total} SP (${s.errors} lỗi)`;
      btn.disabled = false;
      btn.innerHTML = '🏷️ Bơm Tags TOÀN BỘ (Direct)';
      loadOverview();
      if (s.done > 0) loadProducts();
    }
  } catch (e) {
    console.warn('[tags-direct] poll error:', e);
  }
}

async function stopTagsDirect() {
  try {
    await fetch('/api/tags-direct/stop', { method: 'POST' });
    document.getElementById('directTagsTitle').textContent = '⏸ Đang dừng... chờ các job hiện tại kết thúc';
  } catch (e) { console.warn(e); }
}
