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

import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

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

/**
 * Text类用于表示文本内容，支持纯文本和图片URL两种类型
 * <p>
 * 该类主要用于构建多模态内容，可以包含文本信息或图片链接信息
 * </p>
 *
 * @author Captain
 * @since 2025-11-22 17:20
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
@ToString
@JsonInclude(JsonInclude.Include.NON_NULL)
public class Text {

    /**
     * 内容类型，可选值为"text"表示纯文本，"image_url"表示图片链接
     */
    private String type;

    /**
     * 文本内容，当type为"text"时使用此字段存储文本信息
     */
    private Object text;

    /**
     * 图片URL信息，当type为"image_url"时使用此字段存储图片链接信息
     */
    private Image_url image_url;

    /**
     * 创建包含文本内容的Text对象列表
     *
     * @param text 要包装的文本内容
     * @return 包含单个文本Text对象的列表
     */
    public static List<Text> text(String text) {
        List<Text> texts = new ArrayList<>();
        texts.add(new Text("text", text, null));
        return texts;
    }

    /**
     * 创建包含图片URL的Text对象
     *
     * @param url 图片的URL地址
     * @return 包含图片URL信息的Text对象
     */
    public static Text imageUrl(String url) {
        return new Text("image_url", null, new Image_url(url));
    }

    /**
     * Image_url内部类用于封装图片URL信息
     */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @ToString
    public static class Image_url {
        /**
         * 图片的URL地址
         */
        private String url;
    }

}
