package com.seer.teach.teacher.common.llm.sse.req;

import com.seer.teach.common.enums.MessageEnums;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.util.ArrayList;
import java.util.List;

/**
 * 消息实体类，用于表示聊天对话中的消息
 * 包含消息的角色信息和内容列表
 *
 * @author Captain
 * @since 2025-09-27 14:56
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class Message {

    /**
     * 消息角色，如system、user、assistant等
     */
    private String role;

    /**
     * 消息内容列表，包含文本和其他媒体类型的内容
     */
    private List<Text> content;

    /**
     * 创建系统角色的消息
     *
     * @param texts 消息内容列表
     * @return 系统角色的消息对象
     */
    public static Message system(List<Text> texts) {
        return new Message(MessageEnums.SYSTEM.getMessage(), texts);
    }

    /**
     * 创建用户角色的消息
     *
     * @param texts 消息内容列表
     * @return 用户角色的消息对象
     */
    public static Message user(List<Text> texts) {
        return new Message(MessageEnums.USER.getMessage(), texts);
    }

    /**
     * 创建助手角色的消息
     *
     * @param texts 消息内容列表
     * @return 助手角色的消息对象
     */
    public static Message assistant(List<Text> texts) {
        return new Message(MessageEnums.ASSISTANT.getMessage(), texts);
    }

    /**
     * 创建用户角色的消息，合并多个内容列表
     *
     * @param lists 可变参数的内容列表数组
     * @return 合并后用户角色的消息对象
     */
    public static Message get(List<Text>... lists) {
        // 合并所有传入的内容列表
        List<Text> finalList = new ArrayList<>();
        if (lists != null) {
            for (List<Text> list : lists) {
                finalList.addAll(list);
            }
        }
        return new Message(MessageEnums.USER.getMessage(), finalList);
    }

}
