package com.easyagents.agent.runtime.agentscope;

import io.agentscope.core.formatter.openai.OpenAIChatFormatter;
import io.agentscope.core.formatter.openai.dto.OpenAIContentPart;
import io.agentscope.core.formatter.openai.dto.OpenAIMessage;
import io.agentscope.core.message.Msg;

import java.util.List;

/**
 * 为 OpenAI-compatible 模型补充全部消息 content 内容块数组兼容能力。
 */
public final class AgentOpenAIChatFormatter extends OpenAIChatFormatter {

    /**
     * 将 AgentScope 消息转换为 OpenAI 消息，并规范全部角色的 content 格式。
     *
     * @param messages AgentScope 消息
     * @return OpenAI 请求消息
     */
    @Override
    protected List<OpenAIMessage> doFormat(List<Msg> messages) {
        return normalizeContent(super.doFormat(messages));
    }

    /**
     * 将 OpenAI 消息中的 content 统一规范为内容块数组。
     *
     * @param formattedMessages 已完成供应商规则转换的 OpenAI 消息
     * @return content 已规范为数组的原消息列表
     */
    static List<OpenAIMessage> normalizeContent(List<OpenAIMessage> formattedMessages) {
        for (OpenAIMessage message : formattedMessages) {
            Object content = message.getContent();
            if (content instanceof String text) {
                message.setContent(List.of(OpenAIContentPart.text(text)));
            } else if (content == null) {
                message.setContent(List.of(OpenAIContentPart.text("")));
            } else if (!(content instanceof List<?>)) {
                throw new IllegalStateException(
                        "Unsupported OpenAI message content type: " + content.getClass().getName());
            }
        }
        return formattedMessages;
    }
}
