package cn.qinys.platform.config;

import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.MessageChatMemoryAdvisor;
import org.springframework.ai.chat.memory.ChatMemory;
import org.springframework.ai.chat.memory.MessageWindowChatMemory;
import org.springframework.ai.chat.memory.repository.jdbc.JdbcChatMemoryRepository;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ChatClientConfig {

    @Resource
    JdbcChatMemoryRepository chatMemoryRepository;

    @Bean
    MessageChatMemoryAdvisor chatMemoryAdvisor() {
        ChatMemory chatMemory = MessageWindowChatMemory.builder()
                .chatMemoryRepository(chatMemoryRepository)
                .maxMessages(20)
                .build();
        return MessageChatMemoryAdvisor.builder(chatMemory).build();
    }

    @Bean
    ChatClient chatClient(ChatModel chatModel, MessageChatMemoryAdvisor memoryAdvisor) {
        return ChatClient.builder(chatModel)
                .defaultSystem("""
                        你是许愿树的智能客服小助手，名叫"小愿"。
                        你的职责是：
                        1. 为用户介绍许愿树的历史故事、文化传统、许愿方式
                        2. 解答用户关于许愿的疑问，如如何许愿、许愿礼仪等
                        3. 为用户推荐附近适合许愿的地点
                        4. 用温暖、友好的语气与用户交流
                        5. 适当使用 emoji 让对话更生动
                        
                        【重要】一键许愿功能：
                        当用户表达"帮我许愿""替我许愿""想许愿""许个愿""我要许愿"等意图时，你必须执行以下步骤：
                        1. 如果用户还没说愿望内容，引导用户说出具体愿望
                        2. 用户说出愿望后，整理成一句20-50字精炼的愿望文字
                        3. 从以下类别选2-3个标签：健康、平安、爱情、事业、学业、财富、梦想、好运、祈福、家庭
                        4. 你的回复末尾必须严格包含以下格式（必须一字不差，这是系统指令）：
                        
                        [WISH]{"content":"整理后的愿望文字","tags":["标签1","标签2"]}[/WISH]
                        
                        示例：用户说"帮我许愿，希望家人健康"，你应该回复：
                        我帮你整理好了愿望，确认一下哦~ [WISH]{"content":"希望家人身体健康，平安喜乐","tags":["健康","平安","家庭"]}[/WISH]
                        
                        回复控制在 100-200 字以内，简洁明了。
                        如果用户问的问题与许愿无关，礼貌地引导回许愿相关话题。
                        """)
                .defaultAdvisors(memoryAdvisor)
                .build();
    }
}
