// Data loader — fetches real data from either Electron IPC or Web API
// Uses unified pattern: picks data source based on window.SYK_MODE

window.loadRealData = async function loadRealData() {
  const src = window.SYK_MODE === 'web' ? window.api : window.electron;
  if (!src) {
    console.warn('[Data] No data source available — using mock data');
    return { loaded: false };
  }

  const stats = { projects: 0, boqs: 0, drawings: 0, contracts: 0 };

  try {
    // ── PROJECTS ────────────────────────────────────────────────
    const dbProjects = await src.getProjects?.() || [];
    if (dbProjects.length > 0) {
      const mapped = dbProjects.map((p, i) => ({
        id: p.id,
        code: p.code || `PJ-${String(i + 1).padStart(4, '0')}`,
        name: p.name_th || p.name_en || 'Unknown',
        site: p.site || '—',
        value: p.value_thb || 0,
        progress: p.progress_pct || 0,
        status: p.status || 'active',
        start: p.start_date || '—',
        due: p.end_date || '—',
        driveFolderId: p.drive_folder_id,
      }));
      PROJECTS.length = 0;
      mapped.forEach(p => PROJECTS.push(p));
      stats.projects = mapped.length;
    }

    // ── DRAWINGS ────────────────────────────────────────────────
    const dbDrawings = await src.getDrawings?.() || [];
    if (dbDrawings.length > 0) {
      const mapped = dbDrawings.map(d => ({
        id: `DWG-${d.id}`,
        project: d.project_name || `PJ-${d.project_id}`,
        projectId: d.project_id,
        name: d.custom_name || d.name || d.file_name || 'Unnamed',
        discipline: d.discipline || 'Architecture',
        scale: '1:100',
        revision: d.revision || 'A',
        date: d.uploaded_date || '—',
        size: '—',
        pages: 0,
        driveFileId: d.drive_file_id,
        r2Key: d.r2_key,
        fileName: d.file_name,
      }));
      DRAWINGS.length = 0;
      mapped.forEach(d => DRAWINGS.push(d));
      stats.drawings = mapped.length;
    }

    // ── CONTRACTS ───────────────────────────────────────────────
    const dbContracts = await src.getContracts?.() || [];
    if (dbContracts.length > 0) {
      const mapped = dbContracts.map(c => ({
        id: `CT-${c.id}`,
        party: c.counterparty || 'Unknown',
        kind: c.contract_type === 'main' ? 'Owner-Contractor' : 'Subcontract',
        value: c.contract_value_thb || 0,
        signed: c.start_date || '—',
        end: c.end_date || '—',
        retention: c.retention_pct || 0.05,
        status: c.status || 'active',
        project: c.project_name,
        driveFileId: c.drive_file_id,
      }));
      CONTRACTS.length = 0;
      mapped.forEach(c => CONTRACTS.push(c));
      stats.contracts = mapped.length;
    }

    // ── DRIVE_BOQ (real BOQ list) ───────────────────────────────
    const dbBoqs = await src.getBOQs?.() || [];
    if (dbBoqs.length > 0) {
      const mapped = dbBoqs.map(b => ({
        id: b.id,
        name: b.drive_file_name || b.boq_number || 'Unnamed.xlsx',
        size: '—',
        modified: b.created_date || '—',
        area: 0,
        value: b.total_thb || 0,
        kind: b.status || 'submitted',
        project: b.project_name || `PJ-${b.project_id}`,
        projectId: b.project_id,
        driveFileId: b.drive_file_id,
      }));
      DRIVE_BOQ.length = 0;
      mapped.forEach(b => DRIVE_BOQ.push(b));
      stats.boqs = mapped.length;
    }

    console.log(`[Data] ✓ Loaded real data from ${window.SYK_MODE}:`, stats);
    return { loaded: true, stats };
  } catch (err) {
    console.error('[Data] Failed to load:', err);
    return { loaded: false, error: err.message };
  }
};

// ── Open file helpers (mode-aware) ────────────────────────────
window.openDriveFile = async function (driveFileId, fileName) {
  if (window.SYK_MODE === 'web') {
    // Web: open R2-backed download URL in new tab (token-protected)
    console.warn('[openDriveFile] Use api.drawingGetPdfUrl to get download URL');
    return;
  }
  if (!window.electron || !driveFileId) return;
  try {
    const r = await window.electron.driveOpenFile(driveFileId, fileName || 'file');
    if (!r.success) console.error('[Drive] Open failed:', r.error);
  } catch (err) { console.error('[Drive] Open error:', err); }
};

window.driveReimport = async function () {
  if (window.SYK_MODE === 'web') {
    alert('Re-import จาก Drive ใช้ได้เฉพาะใน Electron mode\nWeb mode ใช้ Cloudflare D1 + R2 อยู่แล้ว');
    return;
  }
  if (!window.electron) return;
  const r = await window.electron.driveImportAll();
  if (r.success) {
    await window.loadRealData();
    if (window.__triggerReload) window.__triggerReload();
  }
  return r;
};
