package top.imwork.window.silos.service.upms.impl;

import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;
import jakarta.annotation.Resource;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;

import top.imwork.commons.core.utils.StringUtils;
import top.imwork.window.silos.dao.upms.RegionDao;
import top.imwork.window.silos.entity.upms.Region;
import top.imwork.window.silos.pojo.upms.bo.RegionBO;
import top.imwork.window.silos.pojo.upms.bo.RegionResultBO;
import top.imwork.window.silos.pojo.upms.dto.RegionDTO;
import top.imwork.window.silos.pojo.upms.dto.RegionListDTO;
import top.imwork.window.silos.service.upms.IRegionService;
import top.imwork.window.silos.convert.upms.RegionConvert;

@Service("regionService")
public class RegionServiceImpl extends ServiceImpl<RegionDao,Region> implements IRegionService {
    @Resource
    private RegionDao regionDao;

    /**
     * 根据id获取信息
     * @param id 用户id
     * @return RegionBO 响应信息
     */
    @Override
    public RegionBO info(Long id) {
        Region region = regionDao.info(id);
        return RegionConvert.regionDoToBo(region);
    }

    /**
     * 新增/更新信息
     * @param regionDTO 信息
     * @return regionBO 更新后信息
     */
    @Override
    public RegionBO save(RegionDTO regionDTO) {
        Region region = RegionConvert.regionDtoToDo(regionDTO);
        if (ObjectUtils.isEmpty(region.getId())) {
            regionDao.insert(region);
        } else {
            regionDao.updateById(region);
        }
        return RegionConvert.regionDoToBo(region);
    }

    /**
     * 根据id删除信息
     * @param id id
     * @return true/false 是否删除成功
     */
    @Override
    public Boolean delete(Long id) {
        return regionDao.deleteById(id) == 1 ? Boolean.TRUE : Boolean.FALSE;
    }

    @Override
    public Boolean deleteByIds(String[] ids) {
        return regionDao.deleteByIds(ids) > 0 ? Boolean.TRUE : Boolean.FALSE;
    }

    @Override
    public RegionResultBO queryPage(RegionListDTO regionListDTO) {
        QueryWrapper<Region> queryWrapper = new QueryWrapper<>();

        if (!StringUtils.isEmpty(regionListDTO.getRegionName())) {
            queryWrapper.like("region_name", regionListDTO.getRegionName());
        }

        if (!StringUtils.isEmpty(regionListDTO.getCreateBeginTime())) {
            queryWrapper.apply("create_time >= '" + regionListDTO.getCreateBeginTime() + "'");
        }

        if (!StringUtils.isEmpty(regionListDTO.getCreateEndTime())) {
            queryWrapper.apply("create_time <= '" + regionListDTO.getCreateEndTime() + "'");
        }

        if (!StringUtils.isEmpty(regionListDTO.getUpdateBeginTime())) {
            queryWrapper.apply("update_time >= '" + regionListDTO.getUpdateBeginTime() + "'");
        }

        if (!StringUtils.isEmpty(regionListDTO.getUpdateEndTime())) {
            queryWrapper.apply("update_time <= '" + regionListDTO.getUpdateEndTime() + "'");
        }

        Page<Region> page = new Page<>(regionListDTO.getPageNo(), regionListDTO.getPageRows());
        IPage<Region> iPage = regionDao.queryPage(page, queryWrapper);

        RegionResultBO resultBO = new RegionResultBO();
        resultBO.setPageNo(regionListDTO.getPageNo());
        resultBO.setPageRows(regionListDTO.getPageRows());
        resultBO.setPageCount((int) iPage.getPages());
        resultBO.setTotalRows((int) iPage.getTotal());
        resultBO.setDataList(RegionConvert.regionListToRegionBOList(iPage.getRecords()));
        resultBO.setParams(regionListDTO);

        return resultBO;
    }
}