/**
 * 统一规则常量（单一数据源）。
 *
 * 本模块集中定义跨文件共享的业务规则常量，消除重复定义。
 * 各模块 import 使用，不再各自硬编码。
 *
 * 注意：可调规则参数（关键词/正则/阈值）已迁移至 rules/ruleConfig.ts，
 * 本文件通过 re-export 保持向后兼容。
 */

import type { Direction } from './types';
import {
  DIRECTION_RULES,
  DIRECTION_DEFAULT,
  KEYWORD_FILTER_WHITELIST as _WHITELIST,
  KEYWORD_FILTER_BLACKLIST as _BLACKLIST,
} from '../rules/ruleConfig';

// ─── 支付 App 包名 ───────────────────────────────────────────────

/**
 * 支付 App 包名 → 友好显示名（唯一真相来源）。
 * Kotlin 端通过 Config Plugin 在 expo prebuild 时自动同步此列表。
 * 修改后运行 `npx expo prebuild` 即可更新原生代码。
 */
export const PAYMENT_PACKAGES: Record<string, string> = {
  'com.eg.android.AlipayGphone': '支付宝',
  'com.tencent.mm': '微信',
  'com.unionpay': '银联/云闪付',
  'com.cmbchina': '招商银行',
  'com.cmbchina.ccd.pluto.cmbActivity': '招商银行',
  'com.icbc': '工商银行',
  'com.chinamworld.main': '建设银行',
  'com.ccb.longjiLife': '建设银行',
  'com.cib.cibmb': '兴业银行',
  'com.bankcomm.Bankcomm': '交通银行',
  'com.tencent.mobileqq': '手机QQ',
  'com.tencent.tim': 'TIM',
};

/** 仅包名集合（用于快速查找）。 */
export const PAYMENT_PACKAGE_SET = new Set(Object.keys(PAYMENT_PACKAGES));

// ─── 方向检测 ─────────────────────────────────────────────────────

/**
 * 统一方向检测函数（合并 OCR / SMS / CSV 各处的规则）。
 *
 * 规则表定义在 rules/ruleConfig.ts 的 DIRECTION_RULES 中，
 * 按优先级从高到低遍历，首个命中即返回。
 *
 * 修复记录：
 * - 「利息」区分存款利息（income）与贷款利息（fee）
 * - 「收款方」在「收款」之前检查，避免商户标识被误判为收入
 */
export function detectDirection(text: string, defaultDir: Direction = DIRECTION_DEFAULT): Direction {
  for (const rule of DIRECTION_RULES) {
    if (rule.pattern.test(text)) {
      return rule.direction === 'default' ? defaultDir : rule.direction;
    }
  }
  return defaultDir;
}

// ─── 截屏检测 ─────────────────────────────────────────────────────

/** 截屏文件名关键词（Kotlin 侧需同步）。 */
export const SCREENSHOT_KEYWORDS = ['screenshot', '截屏', '截图', 'screen_shot', 'Screenshot'];

/** 截屏时间窗口（毫秒），过滤旧截图。 */
export const SCREENSHOT_TIME_WINDOW_MS = 30_000;

// ─── 去重 ─────────────────────────────────────────────────────────

/** 去重缓存最大条目数（LRU 淘汰）。 */
export const DEDUP_CACHE_MAX = 200;

/** OCR 图片哈希截取长度（取前 N 字符 hash 避免大图开销）。 */
export const IMAGE_HASH_TRUNCATE_LEN = 1000;

// ─── 短信关键词 ───────────────────────────────────────────────────

/** 银行短信关键词（判断是否为账单短信）。 */
export const SMS_BANK_KEYWORDS = ['交易', '消费', '收入', '支出', '余额', '转账', '入账', '扣款', '退款'];

// ─── 关键词过滤（re-export from ruleConfig，向后兼容） ─────────────

/** 关键词过滤白名单（必须包含任一关键词才通过）。 */
export const KEYWORD_FILTER_WHITELIST = _WHITELIST;

/** 关键词过滤黑名单（包含任一关键词则拒绝）。 */
export const KEYWORD_FILTER_BLACKLIST = _BLACKLIST;

// ─── AI 聊天意图 ──────────────────────────────────────────────────

/** AI 聊天记账意图关键词。 */
export const CHAT_TRANSACTION_KEYWORDS = ['买', '花', '消费', '支付', '记账', '付', '收入', '赚', '工资', '收'];