# -*- coding: utf-8 -*-
"""
百家号 CDP 直接导航模块
========================
使用 Chrome DevTools Protocol 直接创建新标签页并导航到百家号编辑器

用法：
    python bjh_navigate_cdp.py
"""
import sys
import json
import urllib.request
import time

sys.stdout.reconfigure(encoding='utf-8')

# 配置 - 统一使用 9222 端口
HOST = "127.0.0.1"
PORT = 9222
BJH_EDITOR_URL = "https://baijiahao.baidu.com/builder/rc/edit?type=news"

def navigate_to_bjh_editor():
    """
    使用 CDP HTTP API 直接导航到百家号编辑器
    """
    print("=" * 60)
    print("百家号 CDP 直接导航")
    print("=" * 60)
    
    # Step 1: 检查 Chrome 是否运行
    print("\n[Step 1] 检查 Chrome 调试端口...")
    try:
        pages = json.loads(urllib.request.urlopen(
            f'http://{HOST}:{PORT}/json', timeout=5).read())
        print(f"[OK] Chrome 已连接，共 {len(pages)} 个页面")
    except Exception as e:
        print(f"[ERROR] 无法连接到 Chrome: {e}")
        print(f"         请确保 Chrome 已在调试模式运行（端口 {PORT}）")
        return False
    
    # Step 2: 使用 Target.createTarget 创建新标签页
    print(f"\n[Step 2] 创建新标签页...")
    print(f"         URL: {BJH_EDITOR_URL}")
    
    try:
        # 通过 HTTP API 创建新标签页（需要使用 PUT 方法）
        req = urllib.request.Request(
            f'http://{HOST}:{PORT}/json/new?{BJH_EDITOR_URL}',
            method='PUT'
        )
        response = urllib.request.urlopen(req, timeout=10)
        result = json.loads(response.read())
        
        target_id = result.get('id')
        print(f"[OK] 新标签页已创建")
        print(f"         Target ID: {target_id[:20]}...")
        
    except Exception as e:
        print(f"[ERROR] 创建标签页失败: {e}")
        return False
    
    # Step 3: 等待页面加载
    print("\n[Step 3] 等待页面加载...")
    time.sleep(5)
    
    # Step 4: 验证页面
    print("\n[Step 4] 验证页面...")
    try:
        pages = json.loads(urllib.request.urlopen(
            f'http://{HOST}:{PORT}/json', timeout=5).read())
        
        for p in pages:
            url = p.get('url', '')
            if 'baijiahao.baidu.com' in url and ('edit' in url or 'builder' in url):
                print(f"[OK] 找到百家号编辑器页面:")
                print(f"         Page ID: {p['id'][:20]}...")
                print(f"         URL: {p['url'][:60]}...")
                print(f"         Title: {p.get('title', 'N/A')}")
                break
        else:
            print("[WARN] 未找到百家号编辑器页面")
            print("         但导航可能仍在进行中，请检查 Chrome 窗口")
            
    except Exception as e:
        print(f"[WARN] 验证失败: {e}")
    
    print("\n" + "=" * 60)
    print("✅ 导航完成！请检查 Chrome 窗口")
    print("=" * 60)
    return True

def main():
    print("百家号 CDP 导航工具")
    print(f"配置: 端口 {PORT}, 用户数据目录 C:\\ChromeDebug")
    print()
    
    success = navigate_to_bjh_editor()
    if not success:
        print("\n[提示] 如果 Chrome 未启动，请先运行: python start_chrome_bjh.py")
        sys.exit(1)
    
    print("\n下一步建议:")
    print("  1. 在 Chrome 中检查是否已打开百家号编辑器")
    print("  2. 如果未登录，请手动登录")
    print("  3. 登录后运行: python bjh_fill_article_v6.py")

if __name__ == "__main__":
    main()
