/**
 * 统一规则常量（单一数据源）。
 *
 * 本模块集中定义跨文件共享的业务规则常量，消除重复定义。
 * 各模块 import 使用，不再各自硬编码。
 */

import type { Direction } from './types';

// ─── 支付 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.icbc': '工商银行',
  'com.chinamworld.main': '中国银行',
  'com.ccbrcb': '建设银行',
  '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 各处的规则）。
 *
 * 优先级：退款 > 手续费 > 收入 > 支出 > 转账
 * 注意：避免「收款方」中的「收款」被误判为收入。
 */
export function detectDirection(text: string, defaultDir: Direction = 'expense'): Direction {
  if (/退款|退回/.test(text)) return 'refund';
  if (/手续费|利息/.test(text)) return 'fee';
  // 转入 = 钱到账户，视为收入（单边事件，不需要配对）
  if (/转入/.test(text)) return 'income';
  if (/收入|到账|入账/.test(text)) return 'income';
  // 优化：别人转给我的单向转账，应视为收入（收款端的单边入账）
  if (/向你转账|收到转账/.test(text)) return 'income';
  if (/支出|付款|消费|转出/.test(text)) return 'expense';
  // 「转账」方向不明确，标记为 transfer 供后续识别
  if (/转账/.test(text)) return 'transfer';
  // 「收款方」是商户标识，不判为收入；真正的收款是「向您收款」或独立「收款」
  if (/收款方/.test(text)) return defaultDir;
  if (/收款/.test(text)) return 'income';
  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 = ['交易', '消费', '收入', '支出', '余额', '转账', '入账', '扣款', '退款'];

// ─── 关键词过滤 ───────────────────────────────────────────────────

/** 关键词过滤白名单（必须包含任一关键词才通过）。 */
export const KEYWORD_FILTER_WHITELIST = ['交易', '消费', '收入', '支出', '转账', '收款', '付款', '充值', '提现'];

/** 关键词过滤黑名单（包含任一关键词则拒绝）。 */
export const KEYWORD_FILTER_BLACKLIST = ['广告', '推广', '优惠券', '红包封面', '会员到期', '活动'];

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

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