# agent/orchestrator.py  — pip install requests pyautogui pyperclip edge-tts
import json, os, threading, time, requests

LOCAL_URL = "http://127.0.0.1:10086/v1/chat/completions"
LOCAL_MODEL = "qwen2.5-7b"  # স্টুডিওতে লোড করা মডেলের নাম

# OpenRouter দিয়ে ক্লাউড চাইলে (ধাপ ৫):
# API_URL = "https://openrouter.ai/api/v1/chat/completions"
# API_KEY = os.environ.get("OPENROUTER_API_KEY"); MODEL = "huihui-ai/qwen2.5-72b-instruct-abliterated"
API_URL, API_KEY, MODEL = LOCAL_URL, None, LOCAL_MODEL

AGENTS = {
 "1_planner":  "তুমি প্ল্যানার। কাজকে ছোট সাবটাস্কে ভাগ করো, প্রতিটির জন্য এজেন্ট নাম, ইনপুট, আউটপুট ফরম্যাট লেখো।",
 "2_researcher": "তুমি গবেষক। তথ্য খোঁজো, সোর্সসহ সংক্ষিপ্ত ফলাফল দাও।",
 "3_writer":    "তুমি লেখক। দেওয়া নোট থেকে পরিষ্কার বাংলা কনটেন্ট লেখো।",
 "4_coder":     "তুমি কোডার। কাজের জন্য Python/শেল কোড লেখো, comment বাংলায়।",
 "5_tester":    "তুমি টেস্টার। আগের আউটপুটে ভুল/ঝুঁকি খোঁজো, ফিক্স প্রস্তাব দাও।",
 "6_editor":    "তুমি এডিটর। চূড়ান্ত আউটপুট পরিমার্জন করে দাও।",
 "7_analyst":   "তুমি অ্যানালিস্ট। ফলাফল বিশ্লেষণ করে ৩টা মূল সিদ্ধান্ত দাও।",
}

def ask(agent_name, system, task):
    payload = {"model": MODEL, "messages": [
        {"role": "system", "content": system},
        {"role": "user", "content": task}],
        "temperature": 0.7}
    headers = {"Authorization": f"Bearer {API_KEY}"} if API_KEY else {}
    r = requests.post(API_URL, json=payload, headers=headers, timeout=300)
    r.raise_for_status()
    return agent_name, r.json()["choices"][0]["message"]["content"]

def run_parallel(task):
    # ১) প্ল্যানার প্রথমে — ভাগ করে দেবে
    _, plan = ask("1_planner", AGENTS["1_planner"], task)
    print("═══ প্ল্যান ═══\n", plan, "\n")
    # ২) বাকি এজেন্টরা একসাথে (থ্রেডে) কাজ করবে
    results, lock = {}, threading.Lock()
    def worker(name, system, subtask):
        try:
            _, out = ask(name, system, f"প্ল্যান:\n{plan}\n\nতোমার সাবটাস্ক: {subtask}")
            with lock: results[name] = out
            print(f"✅ {name} শেষ")
        except Exception as e:
            with lock: results[name] = f"ERROR: {e}"
            print(f"❌ {name}: {e}")
    threads = [threading.Thread(target=worker, args=(n, s, plan))
               for n, s in AGENTS.items() if n != "1_planner"]
    t0 = time.time()
    [t.start() for t in threads]; [t.join() for t in threads]
    # ৩) সব মার্জ করে রিপোর্ট
    report = "═══ ফাইনাল রিপোর্ট ═══\n" + "\n\n".join(f"▶ {n}:\n{v}" for n, v in results.items())
    report += f"\n\n⏱ মোট সময়: {time.time()-t0:.1f} সেকেন্ড"
    open("report.md", "w", encoding="utf-8").write(report)
    print(report)

if __name__ == "__main__":
    run_parallel(input("কাজ বলুন: "))