package top.continew.admin.controller.business;

import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import top.continew.admin.business.model.query.SubtitleItemPageQuery;
import top.continew.admin.business.model.query.SubtitleItemQuery;
import top.continew.admin.business.model.req.BatchReq;
import top.continew.admin.business.model.req.SubtitleItemReq;
import top.continew.admin.business.model.resp.SubtitleItemDetailResp;
import top.continew.admin.business.model.resp.SubtitleItemResp;
import top.continew.admin.business.service.SubtitleItemService;
import top.continew.starter.extension.crud.annotation.CrudRequestMapping;
import top.continew.starter.extension.crud.controller.BaseController;
import top.continew.starter.extension.crud.enums.Api;
import top.continew.starter.extension.crud.model.query.SortQuery;
import top.continew.starter.extension.crud.model.resp.PageResp;
import top.continew.starter.log.core.annotation.Log;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 数字人-字幕项管理 API
 *
 * @author 王志维
 * @since 2025/12/29
 */
@Tag(name = "数字人-字幕项管理 API")
@RestController
@RequiredArgsConstructor
@CrudRequestMapping(value = "/business/subtitleItem", api = {Api.GET, Api.LIST})
public class SubtitleItemController extends BaseController<SubtitleItemService, SubtitleItemResp, SubtitleItemDetailResp, SubtitleItemQuery, SubtitleItemReq> {

    @Log
    @Operation(summary = "更新字幕项", description = "更新字幕项信息")
    @PutMapping("/{id}")
    public Boolean updateSubtitleItem(@RequestBody SubtitleItemReq req, @PathVariable Long id) {
        baseService.update(req, id);
        return true;
    }

    @Log
    @Operation(summary = "查询字幕项", description = "查询字幕项列表")
    @ResponseBody
    @GetMapping({"/list"})
    public List<SubtitleItemResp> list(SubtitleItemQuery query, SortQuery sortQuery) {
        return baseService.list(query, sortQuery);
    }

    @Log
    @ResponseBody
    @Operation(summary = "新增字幕项", description = "新增字幕项")
    @PostMapping()
    public Long addSubtitleItem(@RequestBody SubtitleItemReq req) {
        return baseService.add(req);
    }

    @Log
    @Operation(summary = "分页查询字幕项", description = "分页查询字幕项列表")
    @ResponseBody
    @GetMapping({"/page"})
    public PageResp<SubtitleItemResp> page(SubtitleItemQuery query, SubtitleItemPageQuery pageQuery) {
        return baseService.pageList(query, pageQuery);
    }

    @Log
    @Operation(summary = "批量删除字幕项", description = "根据字幕项ID列表批量删除字幕项")
    @PostMapping("/batchDelete")
    public void deleteBatch(@Validated @RequestBody BatchReq req) {
        baseService.delete(req.getIds());
    }

    @Log
    @Operation(summary = "批量删除字幕项（通过路径参数）", description = "根据路径中的ID列表批量删除字幕项，ID以逗号分隔")
    @DeleteMapping("/{ids}")
    public void delete(@PathVariable("ids") String ids) {
        List<Long> idList = Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList());
        baseService.delete(idList);
    }

    @Log
    @Operation(summary = "批量添加字幕项", description = "批量添加字幕项")
    @PostMapping("/batchAdd")
    public List<Long> batchAddSubtitleItem(@RequestBody List<SubtitleItemReq> reqList) {
        return baseService.batchAdd(reqList);
    }
}