package com.test.musichouduan.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaIgnore;
import com.test.musichouduan.dto.MusicDTO;
import com.test.musichouduan.dto.Result;
import com.test.musichouduan.service.MusicService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * 热门音乐控制器
 */
@RestController
@RequestMapping("/api/hot-music")
public class HotMusicController {

    @Autowired
    private MusicService musicService;

    /**
     * 获取基于新热度算法的热门音乐列表
     *
     * @param limit 限制数量
     * @return 响应结果
     */
    /**
     * 获取基于新热度算法的热门音乐列表
     *
     * @param limit 限制数量
     * @return 响应结果
     */
    @SaIgnore
    @GetMapping("/list")
    public Result<List<MusicDTO>> getHotMusic(@RequestParam(defaultValue = "10") Integer limit) {
        // 调用 service 层的新方法，该方法会优先从 Redis 缓存获取
        List<MusicDTO> musicList = musicService.getHotMusic(limit);
        return Result.success(musicList);
    }

    /**
     * 手动触发一次热门音乐缓存的更新。
     * 主要用于测试或紧急情况。
     * @return 响应结果
     */
    @SaIgnore
    @GetMapping("/refresh-cache")
    public Result<String> refreshHotMusicCache() {
        // 异步执行，立即返回，不阻塞当前请求
        musicService.updateHotMusicCache();
        return Result.success("热门音乐缓存更新任务已触发，请稍后查看结果。");
    }
}
