#!/usr/bin/env python3
"""成武县人民政府 - 环境影响评价公众参与
API: POST /els-service/article/1/20    → 列表
     POST /els-service/article/cp/1/1  → 详情(正文在 memo 字段)
Category: 1535192418234798080

用法:
    python3 chengwu_crawl.py            # 爬取前5条测试
    python3 chengwu_crawl.py --all      # 爬取全部
    python3 chengwu_crawl.py --sync     # 爬取 + 同步到服务器
"""

import sys, time
from base_crawler import GovCrawler, clean_html

BASE_URL = "http://www.chengwu.gov.cn"
CATAS_ID = "1535192418234798080"
PAGE_SIZE = 20


class ChengwuCrawler(GovCrawler):
    """成武县人民政府 API 爬虫"""

    def __init__(self, all_pages=False, sync=False):
        super().__init__(
            site_name="成武县人民政府-环境影响评价公众参与",
            domain="www.chengwu.gov.cn",
            url=f"{BASE_URL}/cwzwgk/cwfd/?f=3&classinfoid={CATAS_ID}",
            db_name="chengwu_results.db",
        )
        self.all_pages = all_pages
        self.sync = sync

    def fetch_list(self, page=1):
        s = self.get_session()
        r = s.post(
            f"{BASE_URL}/els-service/article/1/{PAGE_SIZE}",
            json={"catas": [CATAS_ID]},
            timeout=30,
        )
        return r.json()

    def fetch_detail(self, dwid):
        s = self.get_session()
        r = s.post(
            f"{BASE_URL}/els-service/article/cp/1/1",
            json={"catas": [CATAS_ID], "dw": [dwid]},
            timeout=30,
        )
        return r.json()

    def do_crawl(self):
        # 1. 获取 cookie
        if not self.get_cookie(BASE_URL):
            print("❌ Cookie 失败")
            return

        # 2. 获取列表
        data = self.fetch_list(1)
        if not data.get("success"):
            print("❌ 列表 API 失败")
            return

        items = data["data"]["contents"]
        total = data["data"]["elementsTotal"]
        limit = total if self.all_pages else min(5, total)
        print(f"📊 API返回: {len(items)}条 (总计{total}条, 爬取{limit}条)")

        # 3. 逐条获取详情
        detail_cache = {}
        for i, item in enumerate(items[:limit], 1):
            title = item.get("subject", "")
            date = item.get("fwdate", "")[:10]
            dwid = item.get("dwid", "")
            xxid = item.get("xxid", "")

            url = f"{BASE_URL}/10086/{dwid}/{xxid}.html"

            # 获取正文（缓存 dwid）
            if dwid not in detail_cache:
                time.sleep(0.3)
                detail_data = self.fetch_detail(dwid)
                if detail_data.get("success"):
                    try:
                        cp = detail_data["data"]["contents"][0]
                        content = clean_html(cp.get("memo", ""))
                    except (IndexError, KeyError):
                        content = ""
                else:
                    content = ""
                detail_cache[dwid] = content
            else:
                content = detail_cache[dwid]

            # 存储
            stored = self.store_item(title, url, content, date)
            if stored:
                self._stats["new"] += 1
            else:
                self._stats["skip"] += 1

            clen = len(content)
            print(f"  {'✅' if stored else '⏭️'} [{date}] {title[:50]}... ({clen}B)")

        # 4. 可选：同步到服务器
        if self.sync:
            self.sync_to_server()


if __name__ == "__main__":
    all_pages = "--all" in sys.argv
    sync = "--sync" in sys.argv

    c = ChengwuCrawler(all_pages=all_pages, sync=sync)
    c.run()

    if "--sync" not in sys.argv:
        print("\n💡 提示: 加 --sync 参数可同步到服务器")
