/// 产品分层：专业板 $4.99 · 键共振 $24.99（另有月/年订与单次判局）— © 2026 Jason Li
///
/// **分页权限（看局）**：
/// ①基础【初断】：地后 · 正／从 · 用／忌 · 格局
/// ②专业【细断】：生克后运前 · 正／从 · 用／忌 · 格局 · 做功 · 二级用忌 · 精准断事
/// ③键共振【详断】：正从用忌仍冻生克后运前；自身运→外环境展开
/// ④结论：指标 → 象义 → 结果
library;

import '../config/app_config.dart';
import '../l10n/l10n.dart';

/// 商业档位（权益）
enum ProductTier {
  /// 免费＝①基础
  free,

  /// 专业板＝①＋②
  pro,

  /// 键共振版＝①＋②＋③＋④（含专业板）
  resonanceMaster,
}

extension ProductTierX on ProductTier {
  String get zh => switch (this) {
        ProductTier.free => '免费版',
        ProductTier.pro => '专业板',
        ProductTier.resonanceMaster => '键共振版',
      };

  String get en => switch (this) {
        ProductTier.free => 'Free',
        ProductTier.pro => 'Pro',
        ProductTier.resonanceMaster => 'Key Resonance',
      };

  String labelOf(AppLang lang) => switch (lang) {
        AppLang.zh => zh,
        AppLang.en => en,
        AppLang.ja => switch (this) {
            ProductTier.free => '無料版',
            ProductTier.pro => '専門板',
            ProductTier.resonanceMaster => 'キー共鳴版',
          },
        AppLang.es => switch (this) {
            ProductTier.free => 'Gratis',
            ProductTier.pro => 'Pro',
            ProductTier.resonanceMaster => 'Resonancia Clave',
          },
        AppLang.ar => switch (this) {
            ProductTier.free => 'مجاني',
            ProductTier.pro => 'احترافي',
            ProductTier.resonanceMaster => 'رنين المفاتيح',
          },
      };

  /// Stripe / 内购产品 ID（买断默认）
  String get productId => switch (this) {
        ProductTier.free => 'kr_free',
        ProductTier.pro => 'kr_pro_499',
        ProductTier.resonanceMaster => 'kr_resonance_2499',
      };
}

/// 功能开关：对齐看局分页权限 ①–④
enum AppFeature {
  basicChart, // 四柱基础盘
  wenzhenFreeApi, // 调用问真免费接口
  /// ①基础：原局→令→地 · 正／从 · 用／忌
  orientYongJi,
  /// ②专业：作用时序2.0 · 格局 · 做功 · 二级用／忌 + 大运→流时叠柱
  proDetail,
  fullMetaTable, // 完整十神藏干神煞表
  /// 兼容旧引用：专业板解锁「专业认知」部（前两部可读）
  fullTutorial,
  tutorialBasics, // 教程 · 基础知识（免费可读）
  tutorialProfessional, // 教程 · 专业认知（专业板）
  tutorialInnovation, // 教程 · 创新技法（键共振）
  keyTeaser, // 键网络预览（未解锁为 0 条）
  /// ③键共振：自身运→外环境叠层 + 完整键网
  keyResonanceFull,
  entanglementFull, // 完整纠缠判断
  /// ②③洋葱交互：大运/小运→流年→流时（专业盘起；键共振同开）
  onionStack,
  liuQinDeep, // 六亲三层
  /// ④结论：指标·象义·结果（初断／细断／详断合成）
  judgmentReport,
  /// 核心理论细节（模型典章公式、特关初值/距离表、531 细则等）· 键共振会员
  coreTheoryDetail,
  stripeUnlock, // 支付解锁
}

/// 看局分页权限一句（报告/典章）
const String kPagePermissionArrowZh =
    '①基础【初断】：地后（正从一次＋用忌初辨·格局）→'
    '②专业【细断】：正从锁地后·用忌再辨（格局·做功·二级喜凶·精准断事）→'
    '③键共振【详断】：正从仍锁地后＋自身运→外环境→'
    '④结论（指标·象义·结果）';

class TierPolicy {
  const TierPolicy._();

  static bool allows(ProductTier tier, AppFeature feature) {
    const freeOnly = {
      AppFeature.basicChart,
      AppFeature.wenzhenFreeApi,
      AppFeature.keyTeaser,
      AppFeature.tutorialBasics,
      AppFeature.orientYongJi,
    };
    const pro = {
      ...freeOnly,
      AppFeature.proDetail,
      AppFeature.fullMetaTable,
      AppFeature.fullTutorial,
      AppFeature.tutorialProfessional,
      AppFeature.stripeUnlock,
      AppFeature.onionStack,
    };
    const master = {
      ...pro,
      AppFeature.tutorialInnovation,
      AppFeature.keyResonanceFull,
      AppFeature.entanglementFull,
      AppFeature.liuQinDeep,
      AppFeature.judgmentReport,
      AppFeature.coreTheoryDetail,
    };
    return switch (tier) {
      ProductTier.free => freeOnly.contains(feature),
      ProductTier.pro => pro.contains(feature),
      ProductTier.resonanceMaster => master.contains(feature),
    };
  }

  /// 键共振盘：未解锁不开放预览条（收费解锁才可看）
  static int keyTeaserLimit(ProductTier tier) =>
      allows(tier, AppFeature.keyResonanceFull) ? 999 : 0;
  static String valueProp(ProductTier tier) => valuePropOf(tier, AppLang.zh);

  static bool keyResonanceUnlocked(ProductTier tier) =>
      allows(tier, AppFeature.keyResonanceFull);

  /// 是否已拥有专业板及以上（②格局做功）
  static bool proUnlocked(ProductTier tier) =>
      allows(tier, AppFeature.proDetail);

  /// ②起：洋葱叠层交互（大小运→流时）
  static bool onionStackUnlocked(ProductTier tier) =>
      allows(tier, AppFeature.onionStack);

  /// ④结论
  static bool conclusionUnlocked(ProductTier tier) =>
      allows(tier, AppFeature.judgmentReport);

  static String valueProp(ProductTier tier) => valuePropOf(tier, AppLang.zh);

  static String valuePropOf(ProductTier tier, AppLang lang) {
          AppLang.es =>
      case ProductTier.free:
        return switch (lang) {
          AppLang.en =>
            'Free ①: natal → season → root · Zheng/Cong · Useful/Avoid. Pro/Key Resonance unlock after payment.',
          AppLang.es =>
            'Gratis ①: natal → estación → raíz · Zheng/Cong · Útil/Evitar. Pro y Resonancia con pago.',
          AppLang.ar =>
            'مجاني ①: الولادة → الموسم → الجذر · زينغ/كونغ · استخدام/تجنب. الاحترافي والرنين بعد الدفع.',
          AppLang.ja =>
            '無料①：原局→令→地 · 正/従 · 用/忌。専門板・キー共鳴は支払い後。',
          AppLang.zh =>
            '免费①：原局→令→地 · 正／从 · 用／忌。专业板与键共振需付款解锁。',
        };
      case ProductTier.pro:
        final p = AppConfig.priceLabel(ProductTier.pro);
        return switch (lang) {
          AppLang.en =>
            'Pro $p ②: + Luck→Minor/Year→Month→Day→Hour stack · action-order 2.0 · formation · work · secondary Yong/Ji + full meta + tutorial.',
          AppLang.es =>
            'Pro $p ②: + pila Suerte→…→Hora · orden de acción 2.0 · formación · obra · Yong/Ji secundario + tabla + tutorial.',
          AppLang.ar =>
            'احترافي $p ②: + طبقات الحظ→…→الساعة · ترتيب الفعل 2.0 · تشكيل · عمل · يونغ/جي ثانوي + جدول + دليل.',
          AppLang.ja =>
            '専門板 $p ②：＋大運→小運/流年→流月→流日→流時 · 作用時序2.0 · 格局 · 做功 · 二級用忌＋完全命盤表＋教程。',
          AppLang.zh =>
            '专业板 $p ②：＋大运→小运/流年→流月→流日→流时叠柱 · 作用时序2.0 · 格局 · 做功 · 二级用／忌 + 完整命盘表 + 教程「基础知识·专业认知」。',
        };
      case ProductTier.resonanceMaster:
        final p = AppConfig.priceLabel(ProductTier.resonanceMaster);
        return switch (lang) {
          AppLang.en =>
            'Key Resonance $p ③④: own luck → outer env (Year→Hour) · keys & entanglement · conclusion/export — includes Pro. Or \$9.99/mo · \$79/yr.',
          AppLang.es =>
            'Resonancia $p ③④: suerte propia → entorno · claves · conclusión — incluye Pro. O \$9.99/mes · \$79/año.',
          AppLang.ar =>
            'رنين $p ③④: حظ ذاتي → بيئة · مفاتيح · خاتمة — يشمل الاحترافي. أو \$9.99/شهر · \$79/سنة.',
          AppLang.ja =>
            'キー共鳴 $p ③④：自身運→外環境 · キー網・絡み · 結論——専門板込。または \$9.99/月 · \$79/年。',
          AppLang.zh =>
            '键共振 $p ③④：自身运→外环境（流年→时）· 纠缠与键共振 · 结论／导出——含专业板。亦可 \$9.99/月 · \$79/年。',
        };
    }
  }
