import os
import sys
from typing import Optional
from pathlib import Path
from datetime import datetime, timezone
from tinydb import TinyDB, Query
from tinydb.storages import JSONStorage

# 将项目根目录添加到系统路径中，以便能够导入项目中的其他模块
sys.path.append(str(Path(__file__).resolve().parent.parent))
from schema.prompt import promptTempleta

# 全局变量，用于存储TinyDB实例
_db_instance: Optional[TinyDB] = None
# 自定义存储类，用于格式化JSON数据
def get_prompt_tinydb(workdir: str) -> TinyDB:
    """
    获取TinyDB实例。如果实例尚未创建，则创建一个新的并返回。

    Args:
        workdir (str): 工作目录路径，用于确定数据库文件的存储位置。

    Returns:
        TinyDB: TinyDB数据库实例
    """
    global _db_instance
    if not _db_instance:
        # 创建数据库目录（如果不存在）
        db_dir = os.path.join(workdir, "db")
        os.makedirs(db_dir, exist_ok=True)
        # 定义数据库文件路径
        db_path = os.path.join(db_dir, "prompts.json")
        # 创建TinyDB实例
        _db_instance = TinyDB(db_path)
    return _db_instance

def initialize_prompt_store(db: TinyDB) -> None:
    """
    初始化prompt模板存储

    Args:
        db (TinyDB): TinyDB数据库实例
    """
    # 检查数据库是否为空
    if not db.all():  # 如果数据库中没有数据
        db.insert(promptTempleta(
            id=1,
            name="default",
            description="默认提示词模板",
            content="""项目名为:{project_name}
请依据以下该项目官方文档的部分内容，创造合适的对话数据集用于微调一个了解该项目的小模型的语料，要求兼顾文档中间尽可能多的信息点，使用中文
文档节选：{document_slice}""").model_dump())
    # 如果数据库中已有数据，则跳过插入


if __name__ == "__main__":
    # 定义工作目录路径
    workdir = os.path.join(os.path.dirname(__file__), "..", "workdir")
    # 获取数据库实例
    db = get_prompt_tinydb(workdir)
    # 初始化prompt存储
    initialize_prompt_store(db)