# -*- coding: utf-8 -*-
"""
百家号一键存草稿（主入口）
===========================
用法：
    python batch_bjh.py

流程：
    Step 1  start_chrome_bjh.py   启动 Chrome 调试模式（端口 9223）
    Step 2  bjh_fill_article.py   填写标题、图片、正文，存草稿

人工介入点：
    - 如果 Chrome 正在运行，需要先关闭再运行本脚本
    - 如果百家号未登录，需要手动登录后按回车继续
"""
import subprocess, sys, os, time, json, urllib.request, random

sys.stdout.reconfigure(encoding='utf-8', errors='replace')
sys.stderr.reconfigure(encoding='utf-8', errors='replace')

# ========================================
# 配置 - 统一使用 9222 端口
# 与微信公众号 Skill 保持一致，确保跨电脑兼容性
# ========================================
SCRIPTS_DIR = os.path.dirname(os.path.abspath(__file__))
PYTHON = sys.executable
HOST = "127.0.0.1"
PORT = 9222

def banner(text, char="=", width=60):
    print("\n" + char * width)
    print(f"  {text}")
    print(char * width)

def check_debug_port():
    try:
        data = json.loads(urllib.request.urlopen(f'http://{HOST}:{PORT}/json', timeout=2).read())
        return data
    except Exception:
        return None

def check_bjh_logged_in():
    """检测百家号是否已登录（有 baijiahao.baidu.com 页面且不是登录页）"""
    try:
        pages = json.loads(urllib.request.urlopen(f'http://{HOST}:{PORT}/json', timeout=2).read())
        for p in pages:
            url = p.get('url', '')
            if 'baijiahao.baidu.com' in url and 'login' not in url:
                return True
        return False
    except Exception:
        return False

def run_script(script_name, timeout=60):
    script_path = os.path.join(SCRIPTS_DIR, script_name)
    if not os.path.exists(script_path):
        print(f"  [ERROR] 脚本不存在: {script_path}")
        return False
    print(f"  [▶] 执行: {script_name}")
    start = time.time()
    try:
        result = subprocess.run(
            [PYTHON, script_path],
            timeout=timeout,
            cwd=SCRIPTS_DIR,
            encoding='utf-8',
            errors='replace'
        )
        elapsed = time.time() - start
        if result.returncode == 0:
            print(f"  [✅] 完成（{elapsed:.1f}s）")
            return True
        else:
            print(f"  [❌] 退出码 {result.returncode}（{elapsed:.1f}s）")
            return False
    except subprocess.TimeoutExpired:
        print(f"  [⏰] 超时（>{timeout}s）")
        return False
    except Exception as e:
        print(f"  [❌] 异常: {e}")
        return False

def main():
    banner("百家号一键存草稿  v2.0", "=")
    print(f"  配置: 端口 {PORT}, 用户数据: C:\\ChromeDebug")
    print()

    # ── Step 1: 启动 Chrome ──────────────────────────────────────────────────
    banner("Step 1：启动 Chrome 调试模式", "-")
    ok = run_script("start_chrome_bjh.py", timeout=20)
    if not ok:
        print("\n[提示] 如果提示 Chrome 正在运行，请先关闭所有 Chrome 窗口，再重新运行本脚本")
        sys.exit(1)

    time.sleep(random.uniform(5, 10))  # 等待 Chrome 完全启动

    # ── Step 2: CDP 导航到百家号编辑器 ───────────────────────────────────────
    banner("Step 2：CDP 导航到百家号编辑器", "-")
    ok = run_script("bjh_navigate_cdp.py", timeout=30)
    if not ok:
        print("\n[提示] 导航失败，请检查 Chrome 是否已启动")
        sys.exit(1)

    time.sleep(random.uniform(10, 20))  # 等待页面加载

    # ── Step 3: 检测登录状态 ─────────────────────────────────────────────────
    banner("Step 3：检测百家号登录状态", "-")
    if not check_bjh_logged_in():
        print("\n⚠️  未检测到百家号登录状态")
        print("   请在 Chrome 中手动登录百家号")
        print("   登录完成后，按回车继续...")
        input()
        if not check_bjh_logged_in():
            print("[WARN] 仍未检测到登录，继续尝试...")
    else:
        print("  [✅] 已检测到百家号登录状态")

    time.sleep(random.uniform(5, 10))

    # ── Step 4: 填写文章并存草稿 ────────────────────────────────────────────
    banner("Step 4：填写文章内容并存草稿", "-")
    ok = run_script("bjh_fill_article_v8.py", timeout=180)
    if not ok:
        print("\n[提示] 如果失败，请先运行 bjh_diagnose.py 诊断页面结构")
        sys.exit(1)

    banner("🎉 完成！草稿已保存到百家号", "=")
    print("  后续操作：")
    print("  1. 在 Chrome 中打开百家号后台 → 草稿箱")
    print("  2. 确认内容无误后手动发布")
    print()
    print("  Chrome 保持打开，确认无误后可手动关闭。")

if __name__ == "__main__":
    main()
