package cn.teammodel.model.entity.ai;

import cn.hutool.core.lang.UUID;
import cn.teammodel.model.entity.BaseItem;
import com.azure.spring.data.cosmos.core.mapping.Container;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.*;

import java.time.Instant;
import java.util.List;

/**
 * 聊天会话,绑定 teacherId(userId), 主键id: sessionId
 * @author winter
 * @create 2023-12-19 15:09
 */
@EqualsAndHashCode(callSuper = true)
@Container(containerName = "Teacher")
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ChatSession extends BaseItem {
    /**
    * 会话名称
    */
    private String title;
    /**
    * 用户 id
    */
    private String userId;
    private Long createTime;
    /**
    * 产生对话即更新时间,按更新时间排序
    */
    private Long updateTime;
    private List<Message> history;

    @Data
    public static class Message {
        private String id;
        private String userText;
        private String gptText;
        private String reasoningText = "";
        /**
        * 消耗的 point
        */
        private Integer cost;
        private Long createTime;

        public String model;

        public static Message of(String userText, String gptText,String model) {
            Message message = new Message();
            message.setId(UUID.randomUUID().toString());
            message.setCost(0);
            message.setUserText(userText);
            message.setGptText(gptText);
            message.setCreateTime(Instant.now().toEpochMilli());
            message.setModel(model);
            return message;
        }


        public static Message of(String userText, String gptText,String model,String reasoningText) {
            Message message = new Message();
            message.setId(UUID.randomUUID().toString());
            message.setCost(0);
            message.setUserText(userText);
            message.setGptText(gptText);
            message.setCreateTime(Instant.now().toEpochMilli());
            message.setModel(model);
            message.setReasoningText(reasoningText);
            return message;
        }
    }
}
