package com.rj.scheduler;

import com.rj.controller.biz.TopSalesController;
import com.rj.dto.TopSalesScoreRequestDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;
import java.util.Map;
import java.util.Random;

/**
 * TopSales评分结果模拟数据定时生成器
 * 每天凌晨1:30，循环50次调用TopSales评分接口，插入模拟的评分数据
 * 数据取值范围参考 topsales_score_result 表结构
 *
 * Author: 自动生成
 * Date: 2025/01/30
 */
@Slf4j
@Component
public class TopSalesMockInsertDataScheduler {

    @Autowired
    private TopSalesController topSalesController;

    // 销售顾问数据 - 参考 AudioMockInsertDataScheduler
    private static final String[][] SALES_PEOPLE = {
        {"1972975619388026881", "江叶", "1899263500"},
        {"1972975623548776449", "许莲", "1894165677"},
        {"1972975624127590401", "叶洋", "1887059943"},
        {"1972975624584769537", "曾艺", "1883632473"},
        {"1972975625037754369", "赵眉", "1502041762"},
        {"1972975625520099329", "付婵", "1506166863"}
    };

    // 经销商门店数据 - 参考 AudioMockInsertDataScheduler
    private static final String[][] DEALERSHIPS = {
        {"1957424710587330562", "广州奔驰4S店", "020-12345678"},
        {"1957424711560409089", "北京奥迪4S店", "010-87654321"},
        {"1957424714953601026", "上海宝马4S店", "021-11223344"},
        {"1957424739267981313", "深圳雷克萨斯4S店", "0755-55667788"},
        {"1957424740000000001", "成都保时捷4S店", "028-99887766"},
        {"1957424740000000017", "昆明威兹曼4S店", "0871-55443322"}
    };

    // 模拟的销售对话内容，覆盖15个评分维度
    private static final String[] MOCK_SALES_CHATS = {
        "销售顾问：您好，欢迎来到我们奔驰展厅，我是张明，很高兴为您服务。客户：你好，我想了解一下C级车。销售顾问：好的，C级车是我们奔驰的经典车型，请问您平时主要用车场景是什么呢？客户：主要是上下班代步。销售顾问：那您对油耗和舒适性有什么要求吗？客户：希望省油一些，舒适性要好。销售顾问：请问您的购车预算大概在什么范围？客户：30-40万左右。销售顾问：这个价位段我们有多款车型可以选择，C级、E级都有合适的配置。根据您的需求，我推荐C260L运动版，2.0T发动机动力充沛，9速自动变速箱平顺省油，还有全景天窗和柏林之声音响。奔驰在安全方面一直领先，C级配备了主动刹车、盲点监测、车道保持等多项安全配置，还有9个安全气囊全方位保护。我们的车内空气质量经过严格检测，使用环保材料，还有PM2.5过滤系统，为您的健康保驾护航。C级搭载了最新的MBUX智能人机交互系统，支持语音控制、手机互联，还有AR实景导航，科技感十足。光听介绍不如亲身体验，我们安排您试驾一下，感受一下奔驰的驾驶质感。客户：好的，什么时候可以试驾？销售顾问：现在就可以，我带您去试驾。如果您今天订车，我们可以给您额外的优惠，包括免费保养和延保服务。客户：让我考虑一下。销售顾问：好的，我给您一份详细的报价单，您可以和家人商量一下。",
        
        "销售顾问：欢迎光临奔驰展厅！请问您贵姓？客户：我姓李。销售顾问：李先生您好，请坐，我给您倒杯水。今天是想了解哪款车型呢？客户：我想看看E级车。销售顾问：E级是我们奔驰的中大型豪华轿车，奔驰作为百年豪华品牌，一直秉承着'汽车发明者'的理念，我们的每一款车都体现了德国工艺的精髓。请问您平时用车主要是商务还是家用？客户：主要是商务接待。销售顾问：那E级商务版很适合您，后排空间宽敞，配置豪华，是商务接待的理想选择。您的购车预算大概在什么范围？客户：50万左右。销售顾问：这个价位段E级很合适，我推荐E300L豪华版，这款车配置丰富，性价比很高。E级商务版配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置，让您的客户感受到尊贵的体验。奔驰的安全技术一直领先，E级配备了智能驾驶辅助系统，包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测，使用环保材料，还有负离子空气净化系统，为您的健康保驾护航。E级搭载了最新的MBUX系统，支持语音控制、手势操作，还有AR实景导航，科技感十足。光听介绍不如亲身体验，我们安排您试驾一下E级，感受一下奔驰的驾驶质感。客户：好的，什么时候可以试驾？销售顾问：现在就可以，我带您去试驾，大概30分钟。如果您今天订车，我们可以给您额外的优惠，包括免费保养、延保服务，还有金融政策支持。客户：让我考虑一下。销售顾问：好的，我给您一份详细的报价单，您可以和家人商量一下。",
        
        "销售顾问：您好，欢迎来到奔驰展厅！我是李华，很高兴为您服务。客户：你好，我想了解一下GLC。销售顾问：GLC是我们奔驰的中型豪华SUV，请问您主要关注哪些方面？客户：空间和通过性。销售顾问：GLC在空间方面很宽敞，通过性也很好，适合家庭使用。奔驰作为豪华品牌，我们的服务理念是'客户至上'，从售前到售后，我们都会为您提供最优质的服务。请问您平时用车主要是商务还是家用？客户：主要是家用。销售顾问：那GLC很适合您，空间宽敞，通过性好，适合家庭使用。您的购车预算大概在什么范围？客户：45万左右。销售顾问：这个价位段GLC很合适，我推荐GLC 300L豪华版，这款车配置丰富，空间宽敞，适合家庭使用。GLC配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置，让您的家人感受到尊贵的体验。奔驰的安全技术一直领先，GLC配备了智能驾驶辅助系统，包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测，使用环保材料，还有负离子空气净化系统，为您的健康保驾护航。GLC搭载了最新的MBUX系统，支持语音控制、手势操作，还有AR实景导航，科技感十足。光听介绍不如亲身体验，我们安排您试驾一下GLC，感受一下奔驰的驾驶质感。客户：好的，什么时候可以试驾？销售顾问：现在就可以，我带您去试驾，大概30分钟。如果您今天订车，我们可以给您额外的优惠，包括免费保养、延保服务，还有金融政策支持。客户：让我考虑一下。销售顾问：好的，我给您一份详细的报价单，您可以和家人商量一下。",
        
        "销售顾问：欢迎光临奔驰展厅！请问您贵姓？客户：我姓王。销售顾问：王先生您好，请坐，我给您介绍一下我们最新的A级车。客户：A级车我比较感兴趣。销售顾问：A级是奔驰的入门级豪华车，性价比很高，适合年轻消费者。奔驰作为豪华品牌，我们的设计理念是'感性·纯粹'，每一款车都体现了奔驰的设计美学。请问您平时用车主要是代步还是商务？客户：主要是代步。销售顾问：那A级很适合您，油耗低，操控灵活，还有丰富的科技配置。您的购车预算大概在什么范围？客户：25万左右。销售顾问：这个价位段A级很合适，我推荐A200L运动版，这款车配置丰富，性价比很高。A级配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置，让您的驾驶体验更加舒适。奔驰的安全技术一直领先，A级配备了主动安全系统，包括主动刹车、盲点监测等，让驾驶更安全。我们的车内环境经过严格检测，使用环保材料，还有负离子空气净化系统，为您的健康保驾护航。A级配备了最新的MBUX系统，支持语音控制、手机互联，还有AR实景导航，科技感十足。光听介绍不如亲身体验，我们安排您试驾一下A级，感受一下奔驰的驾驶质感。客户：好的，什么时候可以试驾？销售顾问：现在就可以，我带您去试驾，大概30分钟。如果您今天订车，我们可以给您额外的优惠，包括免费保养、延保服务，还有金融政策支持。客户：让我考虑一下。销售顾问：好的，我给您一份详细的报价单，您可以和家人商量一下。",
        
        "销售顾问：您好，欢迎来到奔驰展厅！我是王强，很高兴为您服务。客户：你好，我想了解一下S级车。销售顾问：S级是我们奔驰的旗舰豪华轿车，请问您主要关注哪些方面？客户：舒适性和豪华感。销售顾问：S级在舒适性方面有空气悬架，豪华感方面有后排娱乐系统，是商务接待的理想选择。奔驰作为百年豪华品牌，一直秉承着'汽车发明者'的理念，我们的每一款车都体现了德国工艺的精髓。请问您平时用车主要是商务还是家用？客户：主要是商务接待。销售顾问：那S级很适合您，后排空间宽敞，配置豪华，是商务接待的理想选择。您的购车预算大概在什么范围？客户：80万左右。销售顾问：这个价位段S级很合适，我推荐S400L豪华版，这款车配置丰富，性价比很高。S级配备了后排娱乐系统、座椅按摩、氛围灯等豪华配置，让您的客户感受到尊贵的体验。奔驰的安全技术一直领先，S级配备了智能驾驶辅助系统，包括自适应巡航、车道保持、自动泊车等。我们的车内环境经过严格检测，使用环保材料，还有负离子空气净化系统，为您的健康保驾护航。S级搭载了最新的MBUX系统，支持语音控制、手势操作，还有AR实景导航，科技感十足。光听介绍不如亲身体验，我们安排您试驾一下S级，感受一下奔驰的驾驶质感。客户：好的，什么时候可以试驾？销售顾问：现在就可以，我带您去试驾，大概30分钟。如果您今天订车，我们可以给您额外的优惠，包括免费保养、延保服务，还有金融政策支持。客户：让我考虑一下。销售顾问：好的，我给您一份详细的报价单，您可以和家人商量一下。"
    };

    private final Random random = new Random();

    /**
     * 每天 01:30 触发
     */
//    @Scheduled(cron = "0 30 1 * * ?")
    public void generateDailyTopSalesData() {
        try {
            log.info("开始执行TopSales评分模拟数据任务，时间：{}", LocalDateTime.now());
            int success = 0;
            for (int i = 0; i < 50; i++) {
                TopSalesScoreRequestDto requestDto = buildMockTopSalesRequest();
                ResponseEntity<Map<String, Object>> resp = topSalesController.saveMockData(requestDto);
                if (resp != null && resp.getStatusCode().is2xxSuccessful()) {
                    success++;
                } else {
                    log.warn("第{}次插入失败，返回：{}", i + 1, resp == null ? "null" : resp.getStatusCode());
                }
            }
            log.info("TopSales评分模拟数据任务完成，共尝试50次，成功 {} 次", success);
        } catch (Exception e) {
            log.error("TopSales评分模拟数据任务异常", e);
        }
    }

    private TopSalesScoreRequestDto buildMockTopSalesRequest() {
        TopSalesScoreRequestDto requestDto = new TopSalesScoreRequestDto();
        
        // 随机选择销售人员和经销商
        String[] sales = pick(SALES_PEOPLE);
        String[] dealer = pick(DEALERSHIPS);
        
        // 设置基本信息
        requestDto.setChat(pick(MOCK_SALES_CHATS));
        requestDto.setSalespersonName(sales[1]);
        requestDto.setSalespersonPhone(sales[2]);
        requestDto.setDealerName(dealer[1]);
        requestDto.setDealerPhone(dealer[2]);
        
        // 设置来源信息
        requestDto.setSrcContent(requestDto.getChat());
        requestDto.setSrcId("mock_src_" + System.currentTimeMillis() + "_" + random.nextInt(1000));
        requestDto.setSrcDesc("模拟销售对话数据 - " + sales[1] + " 在 " + dealer[1]);
        
        return requestDto;
    }

    private String[] pick(String[][] arr) {
        return arr[random.nextInt(arr.length)];
    }

    private String pick(String[] arr) {
        return arr[random.nextInt(arr.length)];
    }
}
