package com.yutou.qqbot.gpt;

import com.yutou.qqbot.data.baidu.Message;

import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;

public abstract class AbsGPTManager {
    protected static final AtomicInteger MAX_MESSAGE = new AtomicInteger(20);
    /**
     * 清除与GPT管理器相关的所有缓存或状态信息。
     */
    public abstract void clear();

    /**
     * 发送消息到指定用户。
     *
     * @param user    接收消息的用户标识符。
     * @param message 要发送的消息内容。
     * @return 包含消息发送结果的Message对象。
     */
    public abstract Message sendMessage(String user, String message);

    /**
     * 将文本转换为图像。
     *
     * @param user 用户标识符。
     * @param text 要转换为图像的文本内容。
     * @return 包含生成图像的File对象。
     */
    public abstract File textToImage(String user, String text);

    /**
     * 将图像转换为文本。
     *
     * @param user 用户标识符。
     * @param file 包含要转换为文本的图像文件。
     * @return 提取的文本内容。
     */
    public abstract String imageToText(String user, File file);

    /**
     * 获取当前使用的GPT版本信息。
     *
     * @return GPT版本字符串。
     */
    public abstract String getGPTVersion();

    /**
     * 设置最大消息数量。
     *
     * @param count 最大消息数量。
     * @return 设置后的最大消息数量。
     */
    public abstract int setMaxMessageCount(int count);

    /**
     * 根据指定的类获取相应的GPT管理器实例。
     *
     * @param tClass GPT管理器的具体实现类。
     * @return GPT管理器实例。
     */
    public static <T extends AbsGPTManager> AbsGPTManager getManager(Class<T> tClass) {
        if (tClass == BaiduGPTManager.class) {
            return BaiduGPTManager.getManager();
        }
        return new AbsGPTManager() {
            @Override
            public void clear() {

            }

            @Override
            public Message sendMessage(String user, String message) {
                return null;
            }

            @Override
            public File textToImage(String user, String text) {
                return null;
            }

            @Override
            public String imageToText(String user, File file) {
                return "";
            }

            @Override
            public String getGPTVersion() {
                return "";
            }

            @Override
            public int setMaxMessageCount(int count) {
                return 0;
            }
        };
    }

}
