package com.rj.controller;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.rj.dto.DifyWorkflowRequestDto;
import com.rj.dto.CustomerProfileAnalysisRequestDto;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureWebMvc;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.MediaType;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

/**
 * Dify工作流控制器测试类
 * 
 * @author 李中华
 * @date 2025/1/3
 */
@SpringBootTest
@AutoConfigureWebMvc
@ActiveProfiles("test")
public class DifyWorkflowControllerTest {

    @Autowired
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Autowired
    private ObjectMapper objectMapper;

    public void setup() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }


    @Test
    public void testConsultingScenarioWorkflowWithParameters() throws Exception {
        setup();

        // 读取真实的聊天内容
        ClassLoader classLoader = getClass().getClassLoader();
        java.io.InputStream inputStream = classLoader.getResourceAsStream("corpus/qiwei/qw1.txt");
        java.util.Scanner scanner = new java.util.Scanner(inputStream, "UTF-8").useDelimiter("\\A");
        String chatContent = scanner.hasNext() ? scanner.next() : "";
        scanner.close();

        // 生成随机值
        String unionId = "test_union_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String consultantId = "consultant_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String communicateDate = generateRandomDateTime();
        String analysisScene = "sales_consultation";
        String aiAnalysisRequestId = "ai_req_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 12);
        int version = new java.util.Random().nextInt(10) + 1; // 1-10之间的随机版本号

        // 创建测试请求DTO
        DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto();
        requestDto.setUnionId(unionId);
        requestDto.setConsultantId(consultantId);
        requestDto.setCommunicateDate(communicateDate);
        requestDto.setAnalysisScene(analysisScene);
        requestDto.setAiAnalysisRequestId(aiAnalysisRequestId);
        requestDto.setVersion(version);
        requestDto.setChat(chatContent);

        mockMvc.perform(post("/api/dify/workflow/consulting-scenario")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testDCCScenarioWorkflowWithParameters() throws Exception {
        setup();

        // 读取DCC相关的聊天内容
        ClassLoader classLoader = getClass().getClassLoader();
//        java.io.InputStream inputStream = classLoader.getResourceAsStream("corpus/dcc/dcc1.txt");
        java.io.InputStream inputStream = classLoader.getResourceAsStream("corpus/dcc/qw3.txt");
        String chatContent = "";
        if (inputStream != null) {
            java.util.Scanner scanner = new java.util.Scanner(inputStream, "UTF-8").useDelimiter("\\A");
            chatContent = scanner.hasNext() ? scanner.next() : "";
            scanner.close();
        } else {
            // 如果没有DCC语料文件，使用模拟的DCC对话内容
            chatContent = "客户：您好，我想咨询一下DCC服务。\n" +
                         "顾问：您好！欢迎咨询DCC服务。请问您需要了解哪方面的服务呢？\n" +
                         "客户：我想了解一下数据中心的建设方案。\n" +
                         "顾问：好的，我们提供完整的数据中心建设解决方案。请问您的企业规模大概是多少？\n" +
                         "客户：我们是一家中型企业，大概有500名员工。\n" +
                         "顾问：了解了。对于500人规模的企业，我们推荐中小型数据中心方案，包括服务器、存储、网络设备等。\n" +
                         "客户：大概需要多少预算？\n" +
                         "顾问：根据您的规模，预计投资在200-300万元左右，包括硬件设备、软件许可和建设费用。\n" +
                         "客户：建设周期大概多长？\n" +
                         "顾问：从设计到交付，大概需要3-4个月的时间。\n" +
                         "客户：好的，我需要和公司讨论一下，什么时候可以安排详细的技术交流？\n" +
                         "顾问：明天上午10点可以安排技术交流，您方便吗？\n" +
                         "客户：可以的，我明天上午过去。\n" +
                         "顾问：好的，我为您预约明天上午10点的技术交流，地址是...";
        }

        // 生成随机值
        String unionId = "dcc_union_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String consultantId = "dcc_consultant_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String communicateDate = generateRandomDateTime();
        String analysisScene = "dcc_consultation";
        String aiAnalysisRequestId = "dcc_ai_req_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 12);
        int version = new java.util.Random().nextInt(10) + 1; // 1-10之间的随机版本号

        // 创建测试请求DTO
        DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto();
        requestDto.setUnionId(unionId);
        requestDto.setConsultantId(consultantId);
        requestDto.setCommunicateDate(communicateDate);
        requestDto.setAnalysisScene(analysisScene);
        requestDto.setAiAnalysisRequestId(aiAnalysisRequestId);
        requestDto.setVersion(version);
        requestDto.setChat(chatContent);

        mockMvc.perform(post("/api/dify/workflow/dcc-scenario")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testDCCScenarioWorkflowWithMockData() throws Exception {
        setup();

        // 使用模拟的DCC对话内容
        String chatContent = "客户：您好，我想咨询一下DCC服务。\n" +
                           "顾问：您好！欢迎咨询DCC服务。请问您需要了解哪方面的服务呢？\n" +
                           "客户：我想了解一下数据中心的建设方案。\n" +
                           "顾问：好的，我们提供完整的数据中心建设解决方案。请问您的企业规模大概是多少？\n" +
                           "客户：我们是一家中型企业，大概有500名员工。\n" +
                           "顾问：了解了。对于500人规模的企业，我们推荐中小型数据中心方案，包括服务器、存储、网络设备等。\n" +
                           "客户：大概需要多少预算？\n" +
                           "顾问：根据您的规模，预计投资在200-300万元左右，包括硬件设备、软件许可和建设费用。\n" +
                           "客户：建设周期大概多长？\n" +
                           "顾问：从设计到交付，大概需要3-4个月的时间。\n" +
                           "客户：好的，我需要和公司讨论一下，什么时候可以安排详细的技术交流？\n" +
                           "顾问：明天上午10点可以安排技术交流，您方便吗？\n" +
                           "客户：可以的，我明天上午过去。\n" +
                           "顾问：好的，我为您预约明天上午10点的技术交流，地址是...";

        // 创建测试请求DTO
        DifyWorkflowRequestDto requestDto = new DifyWorkflowRequestDto();
        requestDto.setUnionId("dcc_test_union_12345");
        requestDto.setConsultantId("dcc_test_consultant_67890");
        requestDto.setCommunicateDate("2025-01-03 14:30:00");
        requestDto.setAnalysisScene("dcc_consultation");
        requestDto.setAiAnalysisRequestId("dcc_test_ai_req_20250103_001");
        requestDto.setVersion(1);
        requestDto.setChat(chatContent);

        mockMvc.perform(post("/api/dify/workflow/dcc-scenario")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testCustomerProfileAnalysisWorkflowWithRealData() throws Exception {
        setup();

        // 模拟真实的客户画像分析对话内容
        String chatContent = "客户：你好，我想了解一下沃尔沃XC60这款车。\n" +
                           "顾问：您好！很高兴为您介绍沃尔沃XC60。这是一款中型豪华SUV，在安全性和环保方面表现非常出色。\n" +
                           "客户：我比较关心安全性能，听说沃尔沃在安全方面做得很好？\n" +
                           "顾问：是的，沃尔沃XC60配备了City Safety城市安全系统，还有Pilot Assist领航辅助系统，在主动安全方面非常先进。\n" +
                           "客户：那价格方面怎么样？我预算大概在40-50万左右。\n" +
                           "顾问：XC60的指导价在37-47万之间，您的预算完全够用。而且我们现在有置换补贴和金融方案，可以帮您降低购车成本。\n" +
                           "客户：我目前开的是宝马X3，想置换。置换的话有什么优惠吗？\n" +
                           "顾问：宝马X3置换XC60的话，我们可以提供1万元的置换补贴，还有3年免费保养。您对XC60的哪个配置比较感兴趣？\n" +
                           "客户：我比较喜欢T5智远豪华版，配置比较均衡。\n" +
                           "顾问：T5智远豪华版确实是个不错的选择，配置很丰富，包括全景天窗、真皮座椅、哈曼卡顿音响等。您平时主要是家用还是商务用途？\n" +
                           "客户：主要是家用，偶尔会跑长途。我家里有老人和孩子，所以对空间和安全性要求比较高。\n" +
                           "顾问：那XC60非常适合您，空间宽敞，后排座椅可以调节，长途驾驶也很舒适。而且沃尔沃的环保理念很好，车内空气质量是同级最好的。\n" +
                           "客户：我比较担心保值率的问题，沃尔沃的保值率怎么样？\n" +
                           "顾问：沃尔沃的保值率在豪华品牌中属于中等偏上水平，3年保值率大概在65%左右。而且我们提供3年质保，让您用车更放心。\n" +
                           "客户：我听说沃尔沃的维修保养成本比较高，是这样吗？\n" +
                           "顾问：确实，沃尔沃的维修保养成本比普通品牌要高一些，但考虑到豪华品牌的定位，这个成本是合理的。而且我们提供3年免费保养，可以帮您节省不少费用。\n" +
                           "客户：我比较喜欢白色，但担心白色容易脏，您觉得什么颜色比较好？\n" +
                           "顾问：白色确实比较经典，而且显大。如果您担心容易脏，我推荐您考虑水晶白或者珍珠白，这两种颜色比较耐脏。另外，XC60的蓝色和灰色也很受欢迎。\n" +
                           "客户：我比较关心油耗，XC60的油耗怎么样？\n" +
                           "顾问：T5版本的百公里综合油耗大概在8-9升左右，对于这个级别的SUV来说算是比较省油的。而且现在油价相对稳定，用车成本不会太高。\n" +
                           "客户：我听说沃尔沃的智能驾驶辅助系统很好用，能详细介绍一下吗？\n" +
                           "顾问：是的，XC60配备了Pilot Assist领航辅助系统，可以在高速公路上实现半自动驾驶，包括自动跟车、车道保持等功能。还有City Safety城市安全系统，可以识别行人、自行车等，主动刹车避免碰撞。\n" +
                           "客户：听起来很不错。我还有一个问题，就是关于金融方案，你们有什么优惠吗？\n" +
                           "顾问：我们提供多种金融方案，包括低息贷款、0息贷款等。对于置换客户，我们还有专门的置换金融方案，利率更低。您可以选择3年或5年分期，首付最低20%。\n" +
                           "客户：好的，我需要回去和家里人商量一下，什么时候可以安排试驾？\n" +
                           "顾问：明天下午2点可以安排试驾，您方便吗？我们可以安排T5智远豪华版的试驾车。\n" +
                           "客户：可以的，我明天下午过去。\n" +
                           "顾问：好的，我为您预约明天下午2点的试驾，地址是...";

        // 生成随机值
        String businessId = "profile_business_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String customerFlowId = "profile_flow_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 8);
        String communicateDate = generateRandomDateTime();
        String analysisScene = "wechat_chat";
        String aiAnalysisRequestId = "profile_ai_req_" + java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 12);
        String businessType = "wechat_chat";

        // 创建测试请求DTO
        CustomerProfileAnalysisRequestDto requestDto = new CustomerProfileAnalysisRequestDto();
        requestDto.setChat(chatContent);
        requestDto.setCommunicateDate(communicateDate);
        requestDto.setAnalysisScene(analysisScene);
        requestDto.setAiAnalysisRequestId(aiAnalysisRequestId);
        requestDto.setBusinessId(businessId);
        requestDto.setCustomerFlowId(customerFlowId);
        requestDto.setBusinessType(businessType);

        mockMvc.perform(post("/api/dify/workflow/customer-profile-analysis")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testCustomerProfileAnalysisWorkflowWithMockData() throws Exception {
        setup();

        // 使用模拟的客户画像分析对话内容 - 不同场景
        String chatContent = "客户：您好，我想了解一下特斯拉Model Y。\n" +
                           "顾问：您好！很高兴为您介绍特斯拉Model Y。这是一款纯电动中型SUV，在智能化和性能方面表现非常出色。\n" +
                           "客户：我比较关心续航里程，Model Y的续航怎么样？\n" +
                           "顾问：Model Y长续航版NEDC续航里程可以达到660公里，实际使用中大概在500-550公里左右，完全满足日常使用需求。\n" +
                           "客户：充电方便吗？我家里没有充电桩。\n" +
                           "顾问：特斯拉在全国有超过1000个超级充电站，充电很方便。而且我们提供免费的家用充电桩安装服务，您可以在家里安装一个。\n" +
                           "客户：我比较担心电池寿命，特斯拉的电池能用多久？\n" +
                           "顾问：特斯拉的电池质保是8年或16万公里，电池衰减在质保期内如果超过30%可以免费更换。而且特斯拉的电池技术很成熟，正常使用10年以上没问题。\n" +
                           "客户：我听说特斯拉的自动驾驶很厉害，能介绍一下吗？\n" +
                           "顾问：Model Y配备了Autopilot自动辅助驾驶系统，包括自动跟车、自动变道、自动泊车等功能。还有FSD完全自动驾驶功能，可以在城市道路实现自动驾驶。\n" +
                           "客户：价格方面怎么样？我预算在35万左右。\n" +
                           "顾问：Model Y长续航版的价格是34.79万，正好符合您的预算。而且现在购买还有国家补贴和地方补贴，实际价格会更低。\n" +
                           "客户：我比较关心保值率，电动车的保值率怎么样？\n" +
                           "顾问：特斯拉的保值率在电动车中是最好的，3年保值率大概在70%左右，比很多燃油车都要高。而且随着电动车普及，保值率还会进一步提升。\n" +
                           "客户：我家里有老人，他们比较担心电动车的安全性。\n" +
                           "顾问：特斯拉的安全性是非常好的，Model Y获得了NHTSA五星安全评级。而且电动车没有发动机，重心更低，操控性更好。\n" +
                           "客户：我比较喜欢红色，Model Y有红色吗？\n" +
                           "顾问：有的，Model Y提供多种颜色选择，包括中国红、珍珠白、深海蓝等。红色需要额外加价8000元，但确实很漂亮。\n" +
                           "客户：我听说特斯拉的内饰比较简洁，会不会显得太简单？\n" +
                           "顾问：特斯拉的内饰设计确实比较简洁，但这是为了突出科技感。15英寸的中控大屏功能很强大，可以控制车辆的所有功能。而且用料很考究，质感很好。\n" +
                           "客户：我比较关心维修保养，电动车的保养成本怎么样？\n" +
                           "顾问：电动车的保养成本比燃油车低很多，因为没有发动机、变速箱等复杂部件。特斯拉的保养周期是2万公里一次，费用大概在1000-2000元。\n" +
                           "客户：好的，我需要回去考虑一下，什么时候可以安排试驾？\n" +
                           "顾问：明天上午10点可以安排试驾，您方便吗？我们可以安排Model Y长续航版的试驾车。\n" +
                           "客户：可以的，我明天上午过去。\n" +
                           "顾问：好的，我为您预约明天上午10点的试驾，地址是...";

        // 创建测试请求DTO
        CustomerProfileAnalysisRequestDto requestDto = new CustomerProfileAnalysisRequestDto();
        requestDto.setChat(chatContent);
        requestDto.setCommunicateDate("2025-01-03 15:45:00");
        requestDto.setAnalysisScene("wechat_chat");
        requestDto.setAiAnalysisRequestId("profile_test_ai_req_20250103_002");
        requestDto.setBusinessId("profile_test_business_12345");
        requestDto.setCustomerFlowId("profile_test_flow_67890");
        requestDto.setBusinessType("wechat_chat");

        mockMvc.perform(post("/api/dify/workflow/customer-profile-analysis")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testCustomerProfileAnalysisWorkflowWithAICallData() throws Exception {
        setup();

        // 模拟AI通话录音的客户画像分析对话内容
        String chatContent = "客户：喂，你好，我想咨询一下奔驰E级轿车。\n" +
                           "顾问：您好！很高兴为您介绍奔驰E级轿车。这是一款中大型豪华轿车，在舒适性和豪华感方面表现非常出色。\n" +
                           "客户：我比较关心舒适性，E级的座椅怎么样？\n" +
                           "顾问：E级配备了多向电动调节座椅，还有座椅加热、通风、按摩功能。后排座椅也可以调节，乘坐舒适性非常好。\n" +
                           "客户：我听说E级的隔音效果很好，是这样吗？\n" +
                           "顾问：是的，E级采用了双层隔音玻璃和主动降噪技术，车内非常安静。即使在高速行驶时，车内噪音也很小。\n" +
                           "客户：我比较关心动力，E级的动力怎么样？\n" +
                           "顾问：E级提供多种动力选择，包括2.0T和3.0T发动机。2.0T版本最大功率258马力，百公里加速6.6秒，动力完全够用。\n" +
                           "客户：我比较担心油耗，E级的油耗怎么样？\n" +
                           "顾问：E级2.0T版本的百公里综合油耗大概在7-8升左右，对于这个级别的车来说算是比较省油的。而且还有48V轻混系统，可以进一步降低油耗。\n" +
                           "客户：我听说E级的智能驾驶辅助系统很先进，能介绍一下吗？\n" +
                           "顾问：E级配备了Drive Pilot智能驾驶辅助系统，包括自适应巡航、车道保持、自动变道等功能。还有主动刹车、盲点监测等安全功能。\n" +
                           "客户：我比较关心保值率，奔驰E级的保值率怎么样？\n" +
                           "顾问：奔驰E级的保值率在豪华品牌中属于上等水平，3年保值率大概在75%左右。而且奔驰品牌影响力大，二手车市场很活跃。\n" +
                           "客户：我比较喜欢黑色，E级有黑色吗？\n" +
                           "顾问：有的，E级提供多种颜色选择，包括曜岩黑、钻石白、月光石灰等。黑色确实很经典，商务感很强。\n" +
                           "客户：我听说E级的内饰很豪华，能详细介绍一下吗？\n" +
                           "顾问：E级的内饰采用了大量真皮和木饰板，质感非常好。还有双12.3英寸大屏，科技感很强。氛围灯有64种颜色可选，营造出很好的豪华氛围。\n" +
                           "客户：我比较关心维修保养，奔驰的保养成本怎么样？\n" +
                           "顾问：奔驰的保养成本确实比较高，A保大概在1500-2000元，B保大概在3000-4000元。但考虑到豪华品牌的定位，这个成本是合理的。\n" +
                           "客户：我听说E级有金融方案，能介绍一下吗？\n" +
                           "顾问：我们提供多种金融方案，包括低息贷款、0息贷款等。首付最低20%，可以选择3年或5年分期。对于优质客户，利率会更优惠。\n" +
                           "客户：好的，我需要回去考虑一下，什么时候可以安排试驾？\n" +
                           "顾问：明天下午3点可以安排试驾，您方便吗？我们可以安排E300L豪华版的试驾车。\n" +
                           "客户：可以的，我明天下午过去。\n" +
                           "顾问：好的，我为您预约明天下午3点的试驾，地址是...";

        // 创建测试请求DTO - AI通话录音场景
        CustomerProfileAnalysisRequestDto requestDto = new CustomerProfileAnalysisRequestDto();
        requestDto.setChat(chatContent);
        requestDto.setCommunicateDate("2025-01-03 16:20:00");
        requestDto.setAnalysisScene("ai_call");
        requestDto.setAiAnalysisRequestId("profile_ai_call_req_20250103_003");
        requestDto.setBusinessId("ai_call_12345");
        requestDto.setCustomerFlowId("ai_call_flow_67890");
        requestDto.setBusinessType("ai_call");

        mockMvc.perform(post("/api/dify/workflow/customer-profile-analysis")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testCustomerProfileAnalysisWorkflowWithNameplateData() throws Exception {
        setup();

        // 模拟AI铭牌(客流)的客户画像分析对话内容
        String chatContent = "客户：你好，我想了解一下奥迪A6L。\n" +
                           "顾问：您好！很高兴为您介绍奥迪A6L。这是一款中大型豪华轿车，在科技感和驾驶体验方面表现非常出色。\n" +
                           "客户：我比较关心科技配置，A6L有什么亮点？\n" +
                           "顾问：A6L配备了虚拟座舱、三屏联动等科技配置。12.3英寸全液晶仪表盘可以显示导航、车辆信息等，科技感很强。\n" +
                           "客户：我听说A6L的quattro四驱系统很厉害，能介绍一下吗？\n" +
                           "顾问：A6L配备了quattro ultra智能四驱系统，可以根据路况自动切换两驱和四驱模式，既保证了通过性，又降低了油耗。\n" +
                           "客户：我比较关心空间，A6L的后排空间怎么样？\n" +
                           "顾问：A6L的轴距达到了3024mm，后排空间非常宽敞。而且后排座椅可以调节，乘坐舒适性很好。\n" +
                           "客户：我听说A6L的音响系统很好，是什么品牌？\n" +
                           "顾问：A6L配备了Bang & Olufsen音响系统，音质非常好。而且还有主动降噪功能，可以进一步提升音质。\n" +
                           "客户：我比较关心动力，A6L的动力怎么样？\n" +
                           "顾问：A6L提供多种动力选择，包括2.0T和3.0T发动机。2.0T版本最大功率224马力，百公里加速7.5秒，动力完全够用。\n" +
                           "客户：我比较担心油耗，A6L的油耗怎么样？\n" +
                           "顾问：A6L2.0T版本的百公里综合油耗大概在7-8升左右，对于这个级别的车来说算是比较省油的。而且还有48V轻混系统，可以进一步降低油耗。\n" +
                           "客户：我听说A6L的智能驾驶辅助系统很先进，能介绍一下吗？\n" +
                           "顾问：A6L配备了奥迪AI智能驾驶辅助系统，包括自适应巡航、车道保持、自动变道等功能。还有主动刹车、盲点监测等安全功能。\n" +
                           "客户：我比较关心保值率，奥迪A6L的保值率怎么样？\n" +
                           "顾问：奥迪A6L的保值率在豪华品牌中属于中等偏上水平，3年保值率大概在70%左右。而且奥迪品牌影响力大，二手车市场很活跃。\n" +
                           "客户：我比较喜欢银色，A6L有银色吗？\n" +
                           "顾问：有的，A6L提供多种颜色选择，包括天云灰、朱鹭白、传奇黑等。银色确实很经典，商务感很强。\n" +
                           "客户：我听说A6L的内饰很豪华，能详细介绍一下吗？\n" +
                           "顾问：A6L的内饰采用了大量真皮和木饰板，质感非常好。还有三屏联动设计，科技感很强。氛围灯有30种颜色可选，营造出很好的豪华氛围。\n" +
                           "客户：我比较关心维修保养，奥迪的保养成本怎么样？\n" +
                           "顾问：奥迪的保养成本在豪华品牌中属于中等水平，A保大概在1200-1500元，B保大概在2500-3000元。而且奥迪的维修网络很完善，服务很方便。\n" +
                           "客户：我听说A6L有金融方案，能介绍一下吗？\n" +
                           "顾问：我们提供多种金融方案，包括低息贷款、0息贷款等。首付最低20%，可以选择3年或5年分期。对于优质客户，利率会更优惠。\n" +
                           "客户：好的，我需要回去考虑一下，什么时候可以安排试驾？\n" +
                           "顾问：明天上午11点可以安排试驾，您方便吗？我们可以安排A6L 45TFSI豪华版的试驾车。\n" +
                           "客户：可以的，我明天上午过去。\n" +
                           "顾问：好的，我为您预约明天上午11点的试驾，地址是...";

        // 创建测试请求DTO - AI铭牌(客流)场景
        CustomerProfileAnalysisRequestDto requestDto = new CustomerProfileAnalysisRequestDto();
        requestDto.setChat(chatContent);
        requestDto.setCommunicateDate("2025-01-03 17:10:00");
        requestDto.setAnalysisScene("ai_nameplate_flow");
        requestDto.setAiAnalysisRequestId("profile_nameplate_req_20250103_004");
        requestDto.setBusinessId("nameplate_12345");
        requestDto.setCustomerFlowId("nameplate_flow_67890");
        requestDto.setBusinessType("ai_nameplate_flow");

        mockMvc.perform(post("/api/dify/workflow/customer-profile-analysis")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    @Test
    public void testCustomerProfileAnalysisWorkflowWithTestDriveData() throws Exception {
        setup();

        // 模拟AI铭牌(试驾)的客户画像分析对话内容
        String chatContent = "客户：你好，我想试驾一下宝马X5。\n" +
                           "顾问：您好！很高兴为您安排宝马X5的试驾。这是一款中大型豪华SUV，在操控性和豪华感方面表现非常出色。\n" +
                           "客户：我比较关心操控性，X5的操控怎么样？\n" +
                           "顾问：X5采用了宝马经典的50:50前后配重比，操控性非常好。而且配备了xDrive智能四驱系统，可以自动分配前后轴动力，操控更稳定。\n" +
                           "客户：我听说X5的动力很强，能介绍一下吗？\n" +
                           "顾问：X5提供多种动力选择，包括2.0T和3.0T发动机。3.0T版本最大功率340马力，百公里加速5.5秒，动力非常强劲。\n" +
                           "客户：我比较关心舒适性，X5的座椅怎么样？\n" +
                           "顾问：X5配备了多向电动调节座椅，还有座椅加热、通风、按摩功能。后排座椅也可以调节，乘坐舒适性很好。\n" +
                           "客户：我听说X5的隔音效果很好，是这样吗？\n" +
                           "顾问：是的，X5采用了双层隔音玻璃和主动降噪技术，车内非常安静。即使在高速行驶时，车内噪音也很小。\n" +
                           "客户：我比较关心空间，X5的后排空间怎么样？\n" +
                           "顾问：X5的轴距达到了2975mm，后排空间非常宽敞。而且后排座椅可以调节，乘坐舒适性很好。\n" +
                           "客户：我听说X5的智能驾驶辅助系统很先进，能介绍一下吗？\n" +
                           "顾问：X5配备了BMW智能驾驶辅助系统，包括自适应巡航、车道保持、自动变道等功能。还有主动刹车、盲点监测等安全功能。\n" +
                           "客户：我比较关心保值率，宝马X5的保值率怎么样？\n" +
                           "顾问：宝马X5的保值率在豪华品牌中属于上等水平，3年保值率大概在75%左右。而且宝马品牌影响力大，二手车市场很活跃。\n" +
                           "客户：我比较喜欢蓝色，X5有蓝色吗？\n" +
                           "顾问：有的，X5提供多种颜色选择，包括碳黑、宝石青、量子蓝等。蓝色确实很漂亮，运动感很强。\n" +
                           "客户：我听说X5的内饰很豪华，能详细介绍一下吗？\n" +
                           "顾问：X5的内饰采用了大量真皮和木饰板，质感非常好。还有12.3英寸中控大屏，科技感很强。氛围灯有11种颜色可选，营造出很好的豪华氛围。\n" +
                           "客户：我比较关心维修保养，宝马的保养成本怎么样？\n" +
                           "顾问：宝马的保养成本确实比较高，A保大概在1500-2000元，B保大概在3000-4000元。但考虑到豪华品牌的定位，这个成本是合理的。\n" +
                           "客户：我听说X5有金融方案，能介绍一下吗？\n" +
                           "顾问：我们提供多种金融方案，包括低息贷款、0息贷款等。首付最低20%，可以选择3年或5年分期。对于优质客户，利率会更优惠。\n" +
                           "客户：好的，我现在就可以试驾吗？\n" +
                           "顾问：可以的，我们现在就可以安排试驾。请出示您的驾驶证，我为您办理试驾手续。\n" +
                           "客户：好的，这是我的驾驶证。\n" +
                           "顾问：好的，请跟我来，我带您去试驾X5。";

        // 创建测试请求DTO - AI铭牌(试驾)场景
        CustomerProfileAnalysisRequestDto requestDto = new CustomerProfileAnalysisRequestDto();
        requestDto.setChat(chatContent);
        requestDto.setCommunicateDate("2025-01-03 18:00:00");
        requestDto.setAnalysisScene("ai_nameplate_test_drive");
        requestDto.setAiAnalysisRequestId("profile_test_drive_req_20250103_005");
        requestDto.setBusinessId("test_drive_12345");
        requestDto.setCustomerFlowId("test_drive_flow_67890");
        requestDto.setBusinessType("ai_nameplate_test_drive");

        mockMvc.perform(post("/api/dify/workflow/customer-profile-analysis")
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(objectMapper.writeValueAsString(requestDto)))
                .andExpect(status().isOk())
                .andExpect(jsonPath("$.success").exists());
    }

    /**
     * 生成随机日期时间字符串
     * @return 随机日期时间字符串，格式为 "yyyy-MM-dd HH:mm:ss"
     */
    private String generateRandomDateTime() {
        java.util.Random random = new java.util.Random();
        int year = 2020 + random.nextInt(6); // 2020-2025年
        int month = 1 + random.nextInt(12);  // 1-12月
        int day = 1 + random.nextInt(28);    // 1-28日（避免月份天数问题）
        int hour = random.nextInt(24);       // 0-23小时
        int minute = random.nextInt(60);     // 0-59分钟
        int second = random.nextInt(60);     // 0-59秒

        return String.format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second);
    }
}
