package com.tmerclub.cloud.cuerecycle.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import com.tmerclub.cloud.common.database.dto.PageDTO;
import com.tmerclub.cloud.common.database.util.PageUtil;
import com.tmerclub.cloud.common.database.vo.PageVO;
import com.tmerclub.cloud.cuerecycle.mapper.CueTypeMapper;
import com.tmerclub.cloud.cuerecycle.model.CueType;
import com.tmerclub.cloud.cuerecycle.model.dto.CueTypeDTO;
import com.tmerclub.cloud.cuerecycle.model.vo.CueTypeVO;
import com.tmerclub.cloud.cuerecycle.service.CueTypeService;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;

/**
 * 球杆类型表Service实现类
 *
 * @author : frank
 * @create : 2025-04-11 21:22:35
 */
@Service
public class CueTypeServiceImpl implements CueTypeService {

    @Resource
    CueTypeMapper cueTypeMapper;

    @Override
    public PageVO<CueTypeVO> page(PageDTO pageDTO, CueTypeDTO cueTypeDTO) {
        return PageUtil.doPage(pageDTO, () -> cueTypeMapper.list(cueTypeDTO));
    }

    @Override
    public PageVO<CueTypeVO> listEnabled(PageDTO pageDTO) {
        CueTypeDTO cueTypeDTO = new CueTypeDTO();
        cueTypeDTO.setTypeStatus(1);
        return PageUtil.doPage(pageDTO, () -> cueTypeMapper.list(cueTypeDTO));
    }

    @Override
    public CueTypeVO getById(Long typeId) {
        return cueTypeMapper.getById(typeId);
    }

    @Override
    public int save(CueTypeDTO cueTypeDTO) {
        CueType cueType = BeanUtil.toBean(cueTypeDTO, CueType.class);
        cueType.setCreateTime(DateUtil.date());
        return cueTypeMapper.save(cueType);
    }

    @Override
    public int update(CueTypeDTO cueTypeDTO) {
        CueType cueType = BeanUtil.toBean(cueTypeDTO, CueType.class);
        cueType.setUpdateTime(DateUtil.date());
        return cueTypeMapper.update(cueType);
    }

    @Override
    public int delete(Long typeId) {
        CueTypeVO cueTypeVO = cueTypeMapper.getById(typeId);
        CueType cueType = BeanUtil.toBean(cueTypeVO, CueType.class);
        cueType.setUpdateTime(DateUtil.date());
        cueType.setDeleted(1);
        return cueTypeMapper.update(cueType);
    }
}