import { NativeModules, Platform } from 'react-native';

type AppGroupStorageNativeModule = {
  /**
   * 写入 App Group 的 UserDefaults（值为字符串，通常是 JSON）
   */
  setString(key: string, value: string): Promise<void>;
  /**
   * 读取 App Group 的 UserDefaults（值为字符串，通常是 JSON）
   */
  getString(key: string): Promise<string | null>;
  /**
   * 触发 Widget 刷新（iOS 系统仍可能延迟）
   */
  reloadAllTimelines(): Promise<void>;
};

function getNativeModule(): AppGroupStorageNativeModule | null {
  if (Platform.OS !== 'ios') return null;
  const raw = (NativeModules as Record<string, unknown>)?.AppGroupStorage as unknown;
  if (!raw || typeof raw !== 'object') return null;

  // 注意：若 iOS 原生模块没有正确导出方法（例如缺少 RCT_EXTERN_METHOD 桥接）
  // JS 侧可能能拿到模块对象，但方法会是 undefined，这里需要做运行时校验避免崩溃。
  const m = raw as Partial<AppGroupStorageNativeModule>;
  if (typeof m.setString !== 'function') return null;
  if (typeof m.getString !== 'function') return null;
  if (typeof m.reloadAllTimelines !== 'function') return null;
  return m as AppGroupStorageNativeModule;
}

export function isAppGroupStorageAvailable(): boolean {
  return Boolean(getNativeModule());
}

export async function appGroupSetString(key: string, value: string): Promise<void> {
  const m = getNativeModule();
  if (!m) return;
  await m.setString(key, value);
}

export async function appGroupGetString(key: string): Promise<string | null> {
  const m = getNativeModule();
  if (!m) return null;
  return await m.getString(key);
}

export async function appGroupReloadAllTimelines(): Promise<void> {
  const m = getNativeModule();
  if (!m) return;
  await m.reloadAllTimelines();
}

