/* ============================================
   API — Google Sheets sync via Apps Script
   ============================================
   กรอก SCRIPT_URL หลังจาก deploy Apps Script แล้ว
   กรอก API_KEY ให้ตรงกับที่ตั้งใน Code.gs
   ============================================ */

const SHEETS_CONFIG = /*EDITMODE-BEGIN*/{
  "SCRIPT_URL": "https://script.google.com/macros/s/AKfycbyLqY1v__8JNv2vLiebCoc2Tx8KPrzk9Vr9Xgyg7h8NGLBBWmc3gyB0nPIZ0F_pJFAgPQ/exec",
  "API_KEY": "tasker-secret-2026"
}/*EDITMODE-END*/;

// ── STATUS ──
let _syncStatus = 'idle'; // idle | syncing | synced | error
const _syncListeners = new Set();

function setSyncStatus(s) {
  _syncStatus = s;
  _syncListeners.forEach(fn => fn(s));
}

function onSyncStatus(fn) {
  _syncListeners.add(fn);
  return () => _syncListeners.delete(fn);
}

// ── CORE FETCH ──
async function sheetsRequest(method, params = {}) {
  const { SCRIPT_URL, API_KEY } = SHEETS_CONFIG;
  if (!SCRIPT_URL) return null;

  try {
    setSyncStatus('syncing');
    let res;
    if (method === 'GET') {
      const qs = new URLSearchParams({ key: API_KEY, ...params });
      res = await fetch(`${SCRIPT_URL}?${qs}`, { redirect: 'follow' });
    } else {
      res = await fetch(SCRIPT_URL, {
        method: 'POST',
        body: JSON.stringify({ key: API_KEY, ...params }),
        redirect: 'follow',
      });
    }
    if (!res.ok) throw new Error(`HTTP ${res.status}`);
    const data = await res.json();
    if (data.error) throw new Error(data.error);
    setSyncStatus('synced');
    return data;
  } catch (err) {
    console.warn('[TaskerAPI]', err.message);
    setSyncStatus('error');
    return null;
  }
}

// ── PUBLIC API ──
const TaskerAPI = {
  isConfigured() {
    return Boolean(SHEETS_CONFIG.SCRIPT_URL);
  },

  getSyncStatus() { return _syncStatus; },
  onSyncStatus,

  /** Load all tasks from Google Sheets */
  async loadTasks() {
    const data = await sheetsRequest('GET', { action: 'getTasks' });
    return data?.tasks ?? null;
  },

  /** Save all tasks to Google Sheets (full replace) */
  async saveTasks(tasks) {
    await sheetsRequest('POST', { action: 'saveTasks', tasks });
  },

  /** Load users from Google Sheets (optional) */
  async loadUsers() {
    const data = await sheetsRequest('GET', { action: 'getUsers' });
    return data?.users ?? null;
  },

  /** Save users to Google Sheets */
  async saveUsers(users) {
    await sheetsRequest('POST', { action: 'saveUsers', users });
  },

  /** Import CSV data into Sheets (one-time migration) */
  async importCSV(tasks) {
    return await sheetsRequest('POST', { action: 'importTasks', tasks });
  },
};

Object.assign(window, { TaskerAPI, SHEETS_CONFIG });
