# cli/repl.py
"""REPL 循环实现"""

from hello_agents import HelloAgentsLLM
from core.main_agent import MainAgent
from core.file_manager import FileManager
from utils.logger import setup_logger


def print_welcome():
    """打印欢迎信息"""
    print(
        """
╔══════════════════════════════════════════════════════════╗
║                                                          ║
║           🤖 Welcome to LearningAgent!                   ║
║                                                          ║
║              Your AI Learning Companion                  ║
║                                                          ║
╚══════════════════════════════════════════════════════════╝

输入 /help 查看可用命令
    """
    )


def print_goodbye():
    """打印告别信息"""
    print(
        """
╔══════════════════════════════════════════════════════════╗
║                                                          ║
║                  👋 Goodbye!                             ║
║                                                          ║
║              Keep Learning, Keep Growing!                ║
║                                                          ║
╚══════════════════════════════════════════════════════════╝
    """
    )


def start_repl():
    """
    启动 REPL 循环
    """
    # 设置日志
    logger = setup_logger("learning_agent")
    logger.info("LearningAgent started")

    # 初始化组件
    try:
        llm = HelloAgentsLLM()
        file_manager = FileManager()
        # REPL 始终是交互式环境，启用流式输出
        agent = MainAgent(llm, file_manager, streaming=True)
    except Exception as e:
        print(f"❌ 初始化失败：{e}")
        print("请检查配置文件（.env）和 API Key")
        return

    # 显示欢迎信息
    print_welcome()

    # REPL 循环
    while True:
        try:
            # 获取用户输入
            user_input = input("\n> ").strip()

            # 空输入跳过
            if not user_input:
                continue

            # 处理命令
            result = agent.process_command(user_input)

            # 检查是否退出
            if result == "EXIT":
                print_goodbye()
                logger.info("LearningAgent exited normally")
                break

            # 显示结果
            # 注意：如果 agent.streaming=True，流式输出已经打印到 stdout
            # 这里只打印非流式的结果（如帮助信息、错误消息等）
            if not agent.streaming:
                print(result)

        except KeyboardInterrupt:
            print("\n\n👋 操作已取消")
            continue

        except Exception as e:
            logger.error(f"Error in REPL: {e}", exc_info=True)
            print(f"❌ 发生错误：{e}")
            print("输入 /help 查看帮助，或 /exit 退出")


if __name__ == "__main__":
    start_repl()
