/**
 * 跨设备数据同步偏好（todo / notes / 主题等）
 * enableDataSync 默认开启；关闭后写入 chrome.storage.local，不再使用 sync。
 */
export const ENABLE_DATA_SYNC_KEY = 'enableDataSync';

export function getDataSyncEnabled() {
  return new Promise((resolve) => {
    chrome.storage.local.get([ENABLE_DATA_SYNC_KEY], (localResult) => {
      if (typeof localResult[ENABLE_DATA_SYNC_KEY] === 'boolean') {
        resolve(localResult[ENABLE_DATA_SYNC_KEY]);
        return;
      }
      chrome.storage.sync.get([ENABLE_DATA_SYNC_KEY], (syncResult) => {
        const enabled = syncResult[ENABLE_DATA_SYNC_KEY] !== false;
        resolve(enabled);
      });
    });
  });
}

export function setDataSyncEnabled(enabled) {
  const value = !!enabled;
  return new Promise((resolve) => {
    chrome.storage.local.set({ [ENABLE_DATA_SYNC_KEY]: value }, () => {
      // 偏好本身也写入 sync，便于其它已开启同步的设备感知关闭/开启
      chrome.storage.sync.set({ [ENABLE_DATA_SYNC_KEY]: value }, () => {
        window.dispatchEvent(new CustomEvent('datasynctoggle', { detail: { enabled: value } }));
        resolve(value);
      });
    });
  });
}

export function getDataStorageArea(enabled) {
  return enabled ? 'sync' : 'local';
}

/** 仅在开启同步时写入 sync；始终可写 local 缓存由调用方处理 */
export function setSyncedData(data) {
  return getDataSyncEnabled().then((enabled) => {
    if (!enabled) return false;
    return new Promise((resolve) => {
      chrome.storage.sync.set(data, () => resolve(!chrome.runtime.lastError));
    });
  });
}

// 挂到 window，供非 module 脚本使用
if (typeof window !== 'undefined') {
  window.TabMarkDataSync = {
    ENABLE_DATA_SYNC_KEY,
    getDataSyncEnabled,
    setDataSyncEnabled,
    getDataStorageArea,
    setSyncedData
  };
}
