/**
 * 关键词过滤系统（plan.md「2.10 关键词过滤系统」）。
 * 参考 AutoAccounting 的 AnalysisUtils（白名单/黑名单）。
 * 用于通知/短信监听时过滤非账单内容（广告/推广/红包封面等）。
 */

export interface KeywordFilter {
  /** 白名单：必须包含任一关键词才通过（空列表 = 不检查白名单）。 */
  whitelist: string[];
  /** 黑名单：包含任一关键词则拒绝。 */
  blacklist: string[];
}

import { KEYWORD_FILTER_WHITELIST, KEYWORD_FILTER_BLACKLIST } from '../core/constants';

export const DEFAULT_FILTER: KeywordFilter = {
  whitelist: KEYWORD_FILTER_WHITELIST,
  blacklist: KEYWORD_FILTER_BLACKLIST,
};

/**
 * 判断文本是否通过关键词过滤。
 * @returns true = 通过（可能是账单），false = 拒绝（非账单）
 */
export function passesKeywordFilter(text: string, filter: KeywordFilter = DEFAULT_FILTER): boolean {
  if (!text) return false;

  // 黑名单检查：命中任一即拒绝
  if (filter.blacklist.some(kw => text.includes(kw))) {
    return false;
  }

  // 白名单检查：空列表表示不限制
  if (filter.whitelist.length === 0) return true;
  return filter.whitelist.some(kw => text.includes(kw));
}

/** 合并用户自定义过滤与默认（用户优先）。 */
export function mergeFilter(custom: Partial<KeywordFilter>, base: KeywordFilter = DEFAULT_FILTER): KeywordFilter {
  return {
    whitelist: custom.whitelist ?? base.whitelist,
    blacklist: custom.blacklist ?? base.blacklist,
  };
}
