package com.test.musichouduan.controller;

import cn.dev33.satoken.annotation.SaCheckLogin;
import cn.dev33.satoken.annotation.SaCheckRole;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.dev33.satoken.stp.StpUtil;
import com.test.musichouduan.dto.CommentDTO;
import com.test.musichouduan.dto.PageResult;
import com.test.musichouduan.dto.Result;
import com.test.musichouduan.service.CommentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * 评论控制器
 */
@RestController
@RequestMapping("/api/comment")
public class CommentController {

    @Autowired
    private CommentService commentService;

    /**
     * 根据ID获取评论
     *
     * @param id 评论ID
     * @return 响应结果
     */
    @GetMapping("/{id}")
    public Result<CommentDTO> getCommentById(@PathVariable Long id) {
        CommentDTO commentDTO = commentService.getCommentById(id);
        return Result.success(commentDTO);
    }

    /**
     * 分页获取评论列表
     *
     * @param targetId 目标ID
     * @param targetType 目标类型
     * @param page 页码
     * @param size 每页大小
     * @return 响应结果
     */
    @GetMapping("/list")
    public Result<PageResult<CommentDTO>> getCommentList(
            @RequestParam Long targetId,
            @RequestParam Integer targetType,
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        PageResult<CommentDTO> pageResult = commentService.getCommentList(targetId, targetType, page, size);
        return Result.success(pageResult);
    }

    /**
     * 添加评论
     *
     * @param commentDTO 评论DTO
     * @return 响应结果
     */
    @SaCheckLogin
    @PostMapping("/add")
    public Result<CommentDTO> addComment(@RequestBody CommentDTO commentDTO) {
        CommentDTO result = commentService.addComment(commentDTO);
        return Result.success("评论成功", result);
    }

    /**
     * 删除评论
     *
     * @param id 评论ID
     * @return 响应结果
     */
    @SaCheckLogin
    @DeleteMapping("/{id}")
    public Result<Boolean> deleteComment(@PathVariable Long id) {
        boolean result = commentService.deleteComment(id);
        return Result.success("删除成功", result);
    }

    /**
     * 获取用户的评论列表
     *
     * @param page 页码
     * @param size 每页大小
     * @return 响应结果
     */
    @SaCheckLogin
    @GetMapping("/user")
    public Result<PageResult<CommentDTO>> getUserCommentList(
            @RequestParam(defaultValue = "1") Integer page,
            @RequestParam(defaultValue = "10") Integer size) {
        // 获取当前登录用户ID
        Long userId = StpUtil.getLoginIdAsLong();
        PageResult<CommentDTO> pageResult = commentService.getUserCommentList(userId, page, size);
        return Result.success(pageResult);
    }
}
