package com.rj.service;

import com.rj.entity.TtsRequestLog;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDateTime;

/**
 * TTS请求日志短链接设置测试
 * 
 * @author rj
 * @date 2025-01-02
 */
@Slf4j
@SpringBootTest
public class TtsRequestLogShortUrlTest {
    
    @Autowired
    private ITtsRequestLogService ttsRequestLogService;
    
    /**
     * 测试根据音频名称设置短链接（默认15分钟）
     */
    @Test
    public void testSetShortUrlByAudioNameDefault() {
        try {
            String audioName = "test_audio_20250102_150000_12345.mp3";
            
            log.info("开始测试根据音频名称设置短链接（默认15分钟）...");
            log.info("音频名称: {}", audioName);
            
            // 先创建一个测试日志记录
            TtsRequestLog requestLog = createTestRequestLog(audioName);
            boolean saveResult = ttsRequestLogService.saveTtsRequestLog(requestLog);
            
            if (saveResult) {
                log.info("测试日志记录保存成功，ID: {}", requestLog.getId());
                
                // 测试设置短链接
                boolean result = ttsRequestLogService.setShortUrlByAudioName(audioName);
                
                if (result) {
                    log.info("短链接设置成功！");
                    
                    // 查询验证
                    TtsRequestLog updatedLog = ttsRequestLogService.getTtsRequestLogById(requestLog.getId());
                    if (updatedLog != null) {
                        log.info("验证结果:");
                        log.info("  音频名称: {}", updatedLog.getAudioName());
                        log.info("  短链接: {}", updatedLog.getShortUrl());
                        log.info("  过期时间: {}", updatedLog.getShortUrlExpireTime());
                    }
                } else {
                    log.error("短链接设置失败");
                }
            } else {
                log.error("测试日志记录保存失败");
            }
            
        } catch (Exception e) {
            log.error("测试过程中发生异常: {}", e.getMessage(), e);
        }
    }
    

    
    /**
     * 测试不存在的音频名称
     */
    @Test
    public void testSetShortUrlByNonExistentAudioName() {
        try {
            String audioName = "non_existent_audio.mp3";
            
            log.info("开始测试不存在的音频名称...");
            log.info("音频名称: {}", audioName);
            
            // 测试设置短链接
            boolean result = ttsRequestLogService.setShortUrlByAudioName(audioName);
            
            if (result) {
                log.error("意外成功：不存在的音频名称不应该设置成功");
            } else {
                log.info("测试通过：不存在的音频名称正确返回失败");
            }
            
        } catch (Exception e) {
            log.error("测试过程中发生异常: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 测试空音频名称
     */
    @Test
    public void testSetShortUrlByEmptyAudioName() {
        try {
            String audioName = "";
            
            log.info("开始测试空音频名称...");
            log.info("音频名称: '{}'", audioName);
            
            // 测试设置短链接
            boolean result = ttsRequestLogService.setShortUrlByAudioName(audioName);
            
            if (result) {
                log.error("意外成功：空音频名称不应该设置成功");
            } else {
                log.info("测试通过：空音频名称正确返回失败");
            }
            
        } catch (Exception e) {
            log.error("测试过程中发生异常: {}", e.getMessage(), e);
        }
    }
    
    /**
     * 创建测试用的TTS请求日志
     */
    private TtsRequestLog createTestRequestLog(String audioName) {
        TtsRequestLog requestLog = new TtsRequestLog();
        requestLog.setRequestTime(LocalDateTime.now());
        requestLog.setModel("fnlp/MOSS-TTSD-v0.5");
        requestLog.setInputText("测试音频文件");
        requestLog.setInputLength(6);
        requestLog.setVoice("fnlp/MOSS-TTSD-v0.5:claire");
        requestLog.setStatus("SUCCESS");
        requestLog.setAudioName(audioName);
        requestLog.setMinioUrl("http://localhost:9000/audio/" + audioName);
        requestLog.setCreatorName("测试用户");
        requestLog.setCreatorPhone("13800138000");
        requestLog.setCreateTime(LocalDateTime.now());
        requestLog.setUpdateTime(LocalDateTime.now());
        return requestLog;
    }
}
































































