package com.rj.scheduler;

import com.rj.entity.AudioManagement;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringJUnitConfig;

import java.lang.reflect.Method;

import static org.junit.jupiter.api.Assertions.*;

/**
 * AudioMockInsertDataScheduler 单元测试
 * 测试 generateDailyAudioData 方法，真实插入数据库
 *
 * @author Test
 * @since 2025-09-29
 */
@SpringJUnitConfig
@SpringBootTest
class AudioMockInsertDataSchedulerTest {

    @Autowired
    private AudioMockInsertDataScheduler audioMockInsertDataScheduler;

    @Test
    void testGenerateDailyAudioData() {
        try {
            // 执行真实的数据生成和插入
            audioMockInsertDataScheduler.generateDailyAudioData();
            
            // 如果执行到这里没有异常，说明方法执行成功
            assertTrue(true, "generateDailyAudioData 方法执行成功");
            
        } catch (Exception e) {
            fail("generateDailyAudioData 方法执行失败: " + e.getMessage());
        }
    }

    @Test
    void testBuildMockAudioManagement() throws Exception {
        // 使用反射调用私有方法测试数据生成
        Method method = AudioMockInsertDataScheduler.class.getDeclaredMethod("buildMockAudioManagement");
        method.setAccessible(true);

        // 测试生成的数据
        AudioManagement audio = (AudioManagement) method.invoke(audioMockInsertDataScheduler);

        // 验证基本字段
        assertNotNull(audio.getRecordingName(), "录音名称不能为空");
        assertNotNull(audio.getRecordingTime(), "录音时间不能为空");
        assertNotNull(audio.getSalesId(), "销售ID不能为空");
        assertNotNull(audio.getSalesName(), "销售名称不能为空");
        assertNotNull(audio.getDuration(), "录音时长不能为空");
        assertNotNull(audio.getCustomerName(), "客户姓名不能为空");
        assertNotNull(audio.getCustomerPhone(), "客户手机号不能为空");
        assertNotNull(audio.getRecordingText(), "录音文本不能为空");

        // 验证录音文本内容
        assertTrue(audio.getRecordingText().contains("销售顾问"), "录音文本应包含销售顾问对话");
        assertTrue(audio.getRecordingText().contains("客户"), "录音文本应包含客户对话");

        // 验证数据格式
        assertTrue(audio.getCustomerPhone().matches("^1[3-9]\\d{9}$"), "客户手机号格式应正确");
        assertTrue(audio.getDuration().doubleValue() >= 5.0, "录音时长应大于等于5分钟");
        assertTrue(audio.getDuration().doubleValue() <= 60.0, "录音时长应小于等于60分钟");

        System.out.println("生成的录音数据:");
        System.out.println("录音名称: " + audio.getRecordingName());
        System.out.println("销售顾问: " + audio.getSalesName());
        System.out.println("客户姓名: " + audio.getCustomerName());
        System.out.println("录音文本长度: " + audio.getRecordingText().length() + " 字符");
    }
}
