import Foundation
import React
import WidgetKit

/**
 * App Group 共享存储（RN Bridge）
 *
 * 约定：
 * - suiteName：group.com.damer.mindfulness（已在主 App 与 Widget Extension 的 entitlements 配置）
 * - 值统一使用字符串（通常是 JSON），由 JS 侧负责序列化与反序列化
 */
@objc(AppGroupStorage)
final class AppGroupStorage: NSObject {
  // 通过 AppGroupStorageBridge.m 的 RCT_EXTERN_MODULE 导出到 RN
  // 这里不需要显式实现/遵循 RCTBridgeModule，避免某些 Archive 场景下找不到协议类型
  @objc static func requiresMainQueueSetup() -> Bool { false }

  private let suiteName = "group.com.damer.mindfulness"

  private func defaults() -> UserDefaults? {
    UserDefaults(suiteName: suiteName)
  }

  @objc(setString:value:resolver:rejecter:)
  func setString(_ key: String, value: String, resolver resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
    guard let d = defaults() else {
      reject("E_APP_GROUP", "无法初始化 App Group UserDefaults（suiteName=\(suiteName)）", nil)
      return
    }
    d.set(value, forKey: key)
    resolve(nil)
  }

  @objc(getString:resolver:rejecter:)
  func getString(_ key: String, resolver resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
    guard let d = defaults() else {
      reject("E_APP_GROUP", "无法初始化 App Group UserDefaults（suiteName=\(suiteName)）", nil)
      return
    }
    let v = d.string(forKey: key)
    resolve(v)
  }

  /**
   * 触发 Widget 刷新（系统仍可能延迟）
   */
  @objc(reloadAllTimelines:rejecter:)
  func reloadAllTimelines(_ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
    WidgetCenter.shared.reloadAllTimelines()
    resolve(nil)
  }
}

