#!/usr/bin/env python3
import os
import sys
import json
from typing import List, Dict, Any, Optional, Tuple

import magic  # 用于识别文件类型（辅助文件搜索工具）
import base64
import logging
from pathlib import Path

from langchain.prompts import PromptTemplate
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder


# 配置日志记录器
logging.basicConfig(
    level=logging.INFO,
    format="%(asctime)s - %(levelname)s - %(message)s"
)
logger = logging.getLogger(__name__)


class Prompt_Manager:
    def __init__(self):

        # self.final_conversation_prompt_template = None
        pass
    
    def create_object_detect_prompt_template(self):
        """
        设置
            input_variables: 输入参数
            template: 模板样式

        """

        try:
            input_variables= ["object_description",]
            obj_detect_template = """检测图片中{object_description},并给出对应的2D框坐标。"""

        
            # 初始化memory
            obj_detect_prompt_template =  PromptTemplate(
                input_variables= input_variables,
                template= obj_detect_template
            )
            logger.info(msg=f"obj_detect_prompt_template设置成功")
            return obj_detect_prompt_template

        except Exception as e:
            logger.error(f"obj_detect_prompt_template设置失败: {str(e)}")
            return None

    def create_final_conversation_prompt_template(self):
        """
        设置
            input_variables: 输入参数
            template: 模板样式
        """

        try:
            input_variables= ["model_role","field","context", "chat_history", "question"]
            final_template = """您是一位{model_role}，擅长解决{field}的问题，您需要基于提供的上下文信息和对话历史来回答用户的问题。

                上下文信息:
                {context}

                对话历史:
                {chat_history}

                用户当前的问题:
                {question}

                请根据以上信息，用简洁、准确的语言回答用户的问题。如果上下文信息不足以回答，请说明这一点。
                回答:"""

            # 初始化memory
            final_conversation_prompt_template =  PromptTemplate(
                input_variables= input_variables,
                template= final_template
            )
            logger.info(msg=f"prompt_template设置成功")
            return final_conversation_prompt_template

        except Exception as e:
            logger.error(f"prompt_template设置失败: {str(e)}")
            return None
        
    # 创建优化的提示词
    def create_chat_prompt_template(self,prompt:str,variable_name:str):
        """创建智能提示词，引导AI合理使用工具
        
        参数：
            prompt: 提示词，例如"你是一个专业的智能助手，具备多种工具能力，能够帮助用户完成各类任务。

                            可用工具及使用场景：
                            - terminal: 执行系统命令、文件操作、程序运行
                            - app_analysis: 职业分析、应用程序分析、用户画像  
                            - browser: 网页控制、自动化操作、信息采集
                            - weather: 天气查询、气象信息获取

                            工具使用原则：
                            1. 只有用户明确需要执行具体操作时才使用工具
                            2. 对于一般性对话、概念解释、建议咨询等，直接回答
                            3. 优先选择最合适的工具来完成任务
                            4. 如果不确定是否需要工具，优先选择直接回答

                            请保持自然、友好的对话风格，准确理解用户真实意图，明智地选择是否使用工具。"
            variable_name: 新增的变量的名称，例如“message”

        """
        prompt_template = ChatPromptTemplate.from_messages([
                ("system", prompt),
                MessagesPlaceholder(variable_name=variable_name)
        ])
            
        return prompt_template