package cn.teammodel.ai;

import cn.teammodel.common.ErrorCode;
import cn.teammodel.config.exception.ServiceException;
import cn.teammodel.model.dto.ai.ChatModelDto;
import cn.teammodel.utils.FileUtil;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * 读取json文件的聊天模型 数据
 * 使用单例模式
 *
 * 项目启动时就加载json文件,Spring Bean
 * 要在Spring项目启动时就加载JSON文件，并将其作为Spring Bean进行管理，你可以使用@PostConstruct注解的方法来在Bean初始化后加载JSON文件
 *
 *<-- 添加到pom.xml中 -->
 *<dependency>
 *<groupId>com.fasterxml.jackson.core</groupId>
 *<artifactId>jackson-databind</artifactId>
 *<version>2.13.1</version>
 *</dependency>
 */
@Configuration
public class JsonLoader implements InitializingBean {

    private List<ChatModelDto> chatModels = new ArrayList<>();

    private void JsonLoader() {
        // 私有构造函数防止实例化
    }

    /**
     * 读取json文件
     */
    @PostConstruct
    public void loadJsonData(){
        try{

            String fileText = FileUtil.getFileText("Json/ChatModel.json");
            String jsonData = JSON.toJSONString(fileText);
            //获取聊天字段中的数据
            Object obj = JSON.parseObject(jsonData).get("chatModel");
            String jsonData01 = JSON.toJSONString(obj);
            //转换方式
            chatModels = JSON.parseObject(jsonData01, new TypeReference<List<ChatModelDto>>() {});
        }catch (Exception e){
            throw new ServiceException(ErrorCode.OPERATION_ERROR.getCode(), "读取文件" + Arrays.toString(e.getStackTrace()) + e.getMessage());
        }
    }

    /**
     * 返回聊天模型数据
     * @return
     */
    @Bean
    public List<ChatModelDto> myJsonDataBean(){
        return chatModels;
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        JsonLoader();
    }
}
