#!/usr/bin/env python3
"""
Eastmoney Hybrid Executor (skeleton)
Default: custom_first, fallback to TuriX only when needed.
"""
import argparse, json, datetime
from pathlib import Path


def log(path: Path, obj: dict):
    path.parent.mkdir(parents=True, exist_ok=True)
    with path.open("a", encoding="utf-8") as f:
        f.write(json.dumps(obj, ensure_ascii=False) + "\n")


def run_custom_first(task: str) -> dict:
    # TODO: plug AX + OCR + cliclick pipeline
    return {"ok": False, "reason": "custom pipeline not fully implemented", "stage": "ax_navigation"}


def run_turix_fallback(task: str, max_steps: int = 8) -> dict:
    # TODO: invoke TuriX runner with strict no-submit constraints
    return {"ok": False, "reason": "turix fallback stub", "max_steps": max_steps}


def main():
    p = argparse.ArgumentParser()
    p.add_argument("--task", required=True)
    p.add_argument("--mode", default="custom_first", choices=["custom_first", "turix_first"])
    p.add_argument("--log", default="data/eastmoney-rpa/execution.jsonl")
    args = p.parse_args()

    now = datetime.datetime.now().astimezone().isoformat()
    result = None

    if args.mode == "custom_first":
        result = run_custom_first(args.task)
        if not result.get("ok"):
            result = {
                "fallback": run_turix_fallback(args.task, max_steps=8),
                "custom_result": result,
            }
    else:
        result = run_turix_fallback(args.task, max_steps=8)

    payload = {"ts": now, "task": args.task, "mode": args.mode, "result": result}
    log(Path(args.log), payload)
    print(json.dumps(payload, ensure_ascii=False))


if __name__ == "__main__":
    main()
