package com.ruoyi.bid.util;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 招投标系统 - 低仿真核心链路模型
 * 模拟功能：抓取 -> 清洗 -> 智能筛选 -> 模拟报警
 */
public class BidSystemMVP {

    // ================= 配置区域 =================

    // 1. 正向关键词（只要包含这些，就是商机）
    private static final List<String> POSITIVE_KEYWORDS = Arrays.asList("系统", "平台", "软件", "信息化", "大数据");

    // 2. 负面清单（包含这些的不要，比如不想做硬件或装修）
    private static final List<String> NEGATIVE_KEYWORDS = Arrays.asList("装修", "食堂", "采购电脑", "打印机", "车辆");

    // ================= 模拟数据源 (Mock Data) =================
    // 这是一个模拟的网页 HTML，用于演示解析逻辑
    private static final String MOCK_HTML =
            "<html><body>" +
                    "  <div class='list-box'>" +
                    "    <ul>" +
                    "      <li><span class='date'>2025-12-08</span> <a href='/bid/101'>某市智慧城市管理平台软件开发项目</a> <span class='money'>预算：500万元</span></li>" +
                    "      <li><span class='date'>2025-12-08</span> <a href='/bid/102'>机关单位食堂蔬菜配送服务采购</a> <span class='money'>预算：80万元</span></li>" +
                    "      <li><span class='date'>2025-12-07</span> <a href='/bid/103'>XX医院信息化系统维护服务</a> <span class='money'>预算：120万元</span></li>" +
                    "      <li><span class='date'>2025-12-06</span> <a href='/bid/104'>某局办公楼装修工程</a> <span class='money'>预算：300万元</span></li>" +
                    "    </ul>" +
                    "  </div>" +
                    "</body></html>";

    public static void main(String[] args) throws IOException {
        System.out.println("========== 系统启动：开始全网扫描 ==========");

        // Step 1: 获取数据 (这里使用模拟数据，实际开发中使用 Jsoup.connect(url).get())
        Document doc = Jsoup.connect("http://www.chinabidding.org.cn/BidInfoList.html").get();
        //Document doc = Jsoup.parse(MOCK_HTML);
        System.out.println(">> 网页数据抓取成功...");

        // Step 2: 解析列表
       // Elements items = doc.select("ul li");
        Elements items = doc.select("tr td a");
        System.out.println(">> 发现 " + items.size() + " 条原始公告，开始清洗筛选...\n");

        List<Project> potentialProjects = new ArrayList<>();

        for (Element item : items) {
            // 提取关键字段
            String title = item.select("a").text();
            String date = item.select(".date").text();
            String link = "http://www.gov.cn" + item.select("a").attr("href");

            // 简单清洗金额（实际项目需要复杂的正则处理）
            String rawMoney = item.select(".money").text();

            // Step 3: 核心筛选逻辑 (AI 规则引擎雏形)
            if (shouldAlert(title)) {
                Project p = new Project(title, date, rawMoney, link);
                potentialProjects.add(p);

                // 模拟实时日志
                System.out.println("[√ 命中商机] " + title + " -> 存入数据库");
            } else {
                System.out.println("[x 自动忽略] " + title + " (不符合规则)");
            }
        }

        // Step 4: 结果展示与模拟推送
        System.out.println("\n========== 扫描结束，生成日报 ==========");
        System.out.println("今日为您筛选出 " + potentialProjects.size() + " 个高价值项目：");
        for (Project p : potentialProjects) {
            // 这里可以对接 钉钉/企业微信 API
            sendAlert(p);
        }
    }

    /**
     * 智能筛选算法
     */
    private static boolean shouldAlert(String title) {
        // 1. 先看有没有违禁词（一票否决）
        for (String neg : NEGATIVE_KEYWORDS) {
            if (title.contains(neg)) {
                return false; // 包含负面词，直接丢弃
            }
        }
        // 2. 再看有没有关键词
        for (String pos : POSITIVE_KEYWORDS) {
            if (title.contains(pos)) {
                return true; // 命中关键词，保留
            }
        }
        return false; // 既无毒也没营养，丢弃
    }

    /**
     * 模拟发送报警
     */
    private static void sendAlert(Project p) {
        System.out.println("-------------------------------------------------");
        System.out.println("【钉钉机器人】您有一个新标讯！");
        System.out.println("项目：" + p.title);
        System.out.println("金额：" + p.money);
        System.out.println("时间：" + p.date);
        System.out.println("链接：" + p.url);
        System.out.println("-------------------------------------------------");
    }

    // 简单的实体类
    static class Project {
        String title;
        String date;
        String money;
        String url;

        public Project(String title, String date, String money, String url) {
            this.title = title;
            this.date = date;
            this.money = money;
            this.url = url;
        }
    }
}