#!/usr/bin/env python3
import json
import sys

# =========================
# UI RENDERING
# =========================

def render_tile(i, answer):
    emoji = answer.get("emoji", "")
    words = answer.get("words", "")
    intent = answer.get("intent", "")
    sentence = answer.get("sentence", "")

    print(f"{i}. {emoji}  {words}")
    print(f"   🎯 intent: {intent}")
    print(f"   🗣  \"{sentence}\"")

def show_choices(branches):
    print("\nChoose one:\n")
    for i, branch in enumerate(branches[:6], start=1):
        answer = branch.get("answer", {})
        render_tile(i, answer)
    print("0. Exit")

# =========================
# TREE WALKER (RECURSIVE)
# =========================

def run_node(node):
    # Partner question
    question = node.get("question")
    if question:
        print(f"\n👤 Partner asks: {question.get('sentence')}")

    branches = node.get("branches", [])
    if not branches:
        print("\n(end of conversation)")
        return

    while True:
        show_choices(branches)
        choice = input("\nPress 1–6: ").strip()

        if choice == "0":
            sys.exit(0)

        if not choice.isdigit():
            continue

        idx = int(choice) - 1
        if 0 <= idx < len(branches):
            branch = branches[idx]
            answer = branch.get("answer", {})

            print(f"\n🧠 AAC said: {answer.get('sentence')}")

            continuation = branch.get("continuation")
            if continuation:
                run_node(continuation)
            else:
                print("\n(end of conversation)")
            return

# =========================
# MAIN + LOADER
# =========================

def main():
    if len(sys.argv) < 2:
        print("Usage: python3 AAC_cli.py <conversation_file.json>")
        sys.exit(1)

    with open(sys.argv[1], "r") as f:
        data = json.load(f)

    # ----- LOADER MENU -----
    if isinstance(data, list):
        print(f"\n📚 {len(data)} conversations found:\n")
        for i, convo in enumerate(data, start=1):
            title = convo.get("question", {}).get("sentence", "Untitled")
            print(f"{i}. {title}")

        choice = input("\nSelect conversation number: ").strip()
        if not choice.isdigit():
            print("Invalid selection.")
            sys.exit(1)

        convo = data[int(choice) - 1]
    else:
        convo = data

    # ----- START -----
    print(f"\n👤 Partner asks: {convo.get('question', {}).get('sentence')}")

    branches = convo.get("branches", [])
    if not branches:
        print("No responses available.")
        return

    while True:
        show_choices(branches)
        choice = input("\nPress 1–6: ").strip()

        if choice == "0":
            break

        if not choice.isdigit():
            continue

        idx = int(choice) - 1
        if 0 <= idx < len(branches):
            branch = branches[idx]
            answer = branch.get("answer", {})

            print(f"\n🧠 AAC said: {answer.get('sentence')}")

            continuation = branch.get("continuation")
            if continuation:
                run_node(continuation)
            else:
                print("\n(end of conversation)")
            break

# =========================
# ENTRY POINT
# =========================

if __name__ == "__main__":
    main()
