/**
 * 产品库存检测器 — 最小实现
 *
 * 支持模式:
 *   keyword — HTTP 抓取页面，关键词匹配判断库存状态
 */

/**
 * 根据关键词检测页面内容
 * @param {string} html           — 页面 HTML
 * @param {string} inStockKw      — 有货关键词 (逗号分隔)
 * @param {string} outOfStockKw   — 缺货关键词 (逗号分隔)
 * @returns {{ status: string, matchedKeyword: string|null }}
 */
function matchKeywords(html, inStockKw, outOfStockKw) {
  const htmlLower = html.toLowerCase();

  // 先检查缺货关键词（优先级更高：商品页通常同时含 "Add to Cart" 和 "Out of Stock"）
  if (outOfStockKw) {
    const keywords = outOfStockKw.split(',').map(k => k.trim()).filter(Boolean);
    for (const kw of keywords) {
      if (htmlLower.includes(kw.toLowerCase())) {
        return { status: 'out_of_stock', matchedKeyword: kw };
      }
    }
  }

  // 再检查有货关键词
  if (inStockKw) {
    const keywords = inStockKw.split(',').map(k => k.trim()).filter(Boolean);
    for (const kw of keywords) {
      if (htmlLower.includes(kw.toLowerCase())) {
        return { status: 'in_stock', matchedKeyword: kw };
      }
    }
  }

  // 都没匹配到
  return { status: 'out_of_stock', matchedKeyword: null };
}

/**
 * 对一个产品执行检测
 * @param {object} product — products 表的一行 (必须有 url, check_mode 等字段)
 * @returns {Promise<{ status: string, message: string }>}
 */
async function checkProduct(product) {
  if (!product.url) {
    return { status: 'error', message: '产品未配置 URL' };
  }

  const mode = product.check_mode || 'keyword';

  if (mode === 'keyword') {
    return checkByKeyword(product);
  }

  return { status: 'error', message: `不支持的检测模式: ${mode}` };
}

/**
 * keyword 模式检测
 */
async function checkByKeyword(product) {
  try {
    const controller = new AbortController();
    const timeout = setTimeout(() => controller.abort(), 15000);

    const res = await fetch(product.url, {
      signal: controller.signal,
      headers: {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        'Accept-Language': 'en-US,en;q=0.5,zh-CN;q=0.3',
      },
    });
    clearTimeout(timeout);

    if (!res.ok) {
      return { status: 'error', message: `HTTP ${res.status} ${res.statusText}` };
    }

    const html = await res.text();
    const { status, matchedKeyword } = matchKeywords(
      html,
      product.in_stock_keywords,
      product.out_of_stock_keywords
    );

    const msg = matchedKeyword
      ? `关键词匹配: "${matchedKeyword}"`
      : '未匹配到任何关键词，默认缺货';

    return { status, message: msg };
  } catch (err) {
    if (err.name === 'AbortError') {
      return { status: 'error', message: '请求超时 (15s)' };
    }
    return { status: 'error', message: err.message };
  }
}

module.exports = { checkProduct, matchKeywords };
