#!/usr/bin/env python3
"""同步中煤平朔公告数据到服务器 search.db"""
import sqlite3, subprocess, base64, os

SITE_NAME = "中煤平朔公告公示"
DB_PATH = os.path.expanduser("~/gov_crawler/quality_results.db")
SERVER_SSH = "root@1.94.217.116"
SERVER_SEARCH_DB = "/root/search.db"

def esc(v):
    if v is None: return "''"
    return "'" + str(v).replace("'", "''") + "'"

def main():
    print(f"📤 同步 {SITE_NAME} 到服务器...")

    conn = sqlite3.connect(DB_PATH)
    rows = conn.execute(
        "SELECT title, url, content, publish_date, summary FROM quality_results WHERE site_name=? ORDER BY id",
        (SITE_NAME,)
    ).fetchall()
    conn.close()
    print(f"   共 {len(rows)} 条")

    if not rows:
        print("   ⏭ 无数据")
        return

    sql_lines = []
    for title, page_url, content, pub_date, summary in rows:
        content_clean = (content or '')[:8000]
        summary_clean = (summary or '')[:300]
        sql_lines.append(
            f"INSERT OR IGNORE INTO gov_raw "
            f"(title, page_url, content, publish_date, summary, site_name, tags) "
            f"VALUES ({esc(title)},{esc(page_url)},{esc(content_clean)},{esc(pub_date or '')},{esc(summary_clean)},'{SITE_NAME}','环评阶段');"
        )

    sql_lines.append("INSERT INTO gov_search(gov_search) VALUES('rebuild');")
    sql = '\n'.join(sql_lines)
    b64 = base64.b64encode(sql.encode()).decode()

    cmd = f"echo {b64} | base64 -d | sqlite3 {SERVER_SEARCH_DB} && echo OK"
    result = subprocess.run(
        ["ssh", "-o", "ConnectTimeout=10", "-o", "StrictHostKeyChecking=no", SERVER_SSH, cmd],
        capture_output=True, text=True, timeout=120,
    )

    if "OK" in result.stdout:
        print(f"   ✅ {len(rows)} 条同步成功")
        # 重启search_app
        subprocess.run(
            ["ssh", "-o", "StrictHostKeyChecking=no", "-o", "ConnectTimeout=10", SERVER_SSH,
             "pkill -f search_app 2>/dev/null; sleep 1; cd /root && nohup python3 search_app.py > /var/log/srch.log 2>&1 &"],
            capture_output=True, timeout=30,
        )
        print("   ✅ search_app 已重启")
    else:
        print(f"   ❌ 同步失败: {result.stderr[:300] or result.stdout[:300]}")

if __name__ == "__main__":
    main()
