#!/usr/bin/env python3
"""将本地quality_results.db中指定domain的数据同步到服务器search.db"""
import sys, os, sqlite3, base64, subprocess

DOMAIN = sys.argv[1] if len(sys.argv) > 1 else ''
if not DOMAIN:
    print("Usage: sync_domain.py <domain>")
    sys.exit(1)

SITE_NAMES = {
    'ahccci.huainan.gov.cn': '淮南现代煤化工产业园',
}
SITE_NAME = SITE_NAMES.get(DOMAIN, DOMAIN)
SERVER_SSH = "root@1.94.217.116"
SERVER_DB = "/root/search.db"
QUALITY_DB = os.path.expanduser("~/gov_crawler/quality_results.db")

conn = sqlite3.connect(QUALITY_DB)
rows = conn.execute(
    "SELECT title, url, content, publish_date, summary, domain "
    "FROM crawl_results WHERE domain=? ORDER BY id", (DOMAIN,)
).fetchall()
conn.close()

print(f"本地 {DOMAIN}: {len(rows)} 条")

batch = []
for row in rows:
    title, url, content, pub_date, summary, domain = row
    def esc(s):
        return (s or '').replace("'", "''")
    batch.append(
        f"INSERT OR IGNORE INTO gov_raw "
        f"(title, page_url, content, publish_date, summary, site_name) "
        f"VALUES ('{esc(title)}','{esc(url)}','{esc((content or '')[:15000])}',"
        f"'{esc(pub_date)}','{esc((summary or '')[:500])}','{SITE_NAME}');"
    )

chunk_size = 20
total = len(batch)
ok = 0
for i in range(0, total, chunk_size):
    chunk = batch[i:i+chunk_size]
    sql = ''.join(chunk)
    sql_b64 = base64.b64encode(sql.encode()).decode()
    cmd = f"echo {sql_b64} | base64 -d | sqlite3 {SERVER_DB}"
    result = subprocess.run(
        ["ssh", "-o", "StrictHostKeyChecking=no", "-o", "BatchMode=yes",
         SERVER_SSH, cmd],
        capture_output=True, text=True, timeout=60
    )
    if result.returncode == 0:
        ok += len(chunk)
        print(f"  ✓ {ok}/{total}", end='\r')
    else:
        stderr_clean = result.stderr[:100].replace('\n', ' ')
        print(f"\n  ✗ batch {i}: {stderr_clean}")

print(f"\n✅ {ok}/{total} 同步成功")

if ok > 0:
    print("重建FTS索引...")
    subprocess.run(
        ["ssh", SERVER_SSH,
         "sqlite3 /root/search.db \"INSERT INTO gov_search(gov_search) VALUES('rebuild');\""],
        capture_output=True, timeout=60
    )
    # 重启服务
    subprocess.run(
        ["ssh", SERVER_SSH,
         "pkill -f search_app; sleep 1; cd /root && nohup python3 search_app.py > /dev/null 2>&1 &"],
        capture_output=True, timeout=30
    )
    print("✅ 完成！")
