package top.imwork.window.silos.controller.cms.books;

import jakarta.annotation.Resource;
import jakarta.validation.Valid;
import org.springframework.web.bind.annotation.*;

import top.imwork.commons.core.base.BaseController;
import top.imwork.commons.core.pojo.DeleteParams;
import top.imwork.commons.core.pojo.ResponseMsg;
import top.imwork.window.silos.convert.InfoConvert;
import top.imwork.window.silos.pojo.bo.InfoBO;
import top.imwork.window.silos.pojo.bo.InfoResultBO;
import top.imwork.window.silos.pojo.po.InfoListParamVO;
import top.imwork.window.silos.pojo.po.InfoParamVO;
import top.imwork.window.silos.service.book.IInfoService;
import top.imwork.window.silos.utils.StringUtils;

/**
 * 图书信息表（书目数据）
 *
 * @author jiangxiaowei
 * email: e-jiangxiaowei@outlook.com
 * date: 2025-11-04 13:16:26
 */
@RestController
@RequestMapping("/cms/book/info")
public class InfoServiceController extends BaseController {

    @Resource
    public IInfoService infoService;

    /**
     * 根据id查询数据
     *
     * @param id long类型的id
     * @return 返回查询结果
     */
    @GetMapping("/info/{id}")
    public ResponseMsg info(@PathVariable("id") Long id) {
        return ResponseMsg.buildResponse(infoService.info(id));
    }

    /**
     * 新增/修改info
     *
     * @param infoParamVO 实体信息
     * @return responseMsg 操作结果
     */
    @PostMapping("/save")
    public ResponseMsg save(@RequestBody @Valid InfoParamVO infoParamVO) {
        InfoBO infoBO = infoService.save(InfoConvert.infoParamVoToDto(infoParamVO));
        return ResponseMsg.buildResponse(InfoConvert.infoBoToVo(infoBO));
    }

    /**
     * 根据id删除图书信息表（书目数据）
     *
     * @param id id
     * @return true/false 成功/失败
     */
    @DeleteMapping("/delete/{id}")
    public ResponseMsg delete(@PathVariable("id") Long id) {
        return infoService.delete(id) ? ResponseMsg.ok() : ResponseMsg.fail();
    }

    /**
     * 批量逻辑删除信息
     *
     * @param dto 删除条件
     * @return true/false 是否删除成功
     */
    @DeleteMapping("/deleteByIds")
    public ResponseMsg deleteByIds(@RequestBody DeleteParams dto) {
        String[] idArr = dto.getIds().split(",");
        return infoService.deleteByIds(idArr) ? ResponseMsg.ok() : ResponseMsg.fail();
    }

    @PostMapping("/queryPage")
    public ResponseMsg queryPage(@RequestBody @Valid InfoListParamVO infoListParamVO) {
        infoListParamVO.setInfoName(StringUtils.isEmpty(infoListParamVO.getSearchKey()) ? infoListParamVO.getInfoName() : infoListParamVO.getSearchKey());
        InfoResultBO infoResultBO = infoService.queryPage(InfoConvert.infoListParamVoToDTO(infoListParamVO));
        return ResponseMsg.buildResponse(InfoConvert.infoResultBoToVo(infoResultBO));
    }
}
