package jnpf.cultivate.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.base.ActionResult;
import jnpf.base.entity.SuperBaseEntity;
import jnpf.cultivate.mapper.FtbCultivateCourseMapper;
import jnpf.cultivate.mapper.FtbCultivateCourseTypeMapper;
import jnpf.cultivate.service.FtbCultivateCourseTypeService;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseTypeDTO;
import jnpf.model.cultivate.dto.course.FtbCultivateCourseTypeUpdateDTO;
import jnpf.model.cultivate.po.course.FtbCultivateCourse;
import jnpf.model.cultivate.po.course.FtbCultivateCourseType;
import jnpf.model.cultivate.vo.course.web.FtbCultivateCourseTypeVO;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

@Service
public class FtbCultivateCourseTypeServiceImpl extends ServiceImpl<FtbCultivateCourseTypeMapper, FtbCultivateCourseType> implements FtbCultivateCourseTypeService {
    @Resource
    private FtbCultivateCourseMapper ftbCultivateCourseMapper;

    @Override
    @Transactional
    public void add(FtbCultivateCourseTypeDTO ftbCultivateCourseDTO) {
        LambdaQueryWrapper<FtbCultivateCourseType> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(FtbCultivateCourseType::getEnableMark, 0);
        queryWrapper.eq(FtbCultivateCourseType::getName, ftbCultivateCourseDTO.getName());
        if (this.baseMapper.selectCount(queryWrapper) > 0) {
            throw new RuntimeException("系统已存在该课程类型名称，请勿重复添加");
        }
        FtbCultivateCourseType ftbCultivateCourseType = FtbCultivateCourseTypeDTO
                .convertFtbCultivateCourseType(ftbCultivateCourseDTO);
        baseMapper.insert(ftbCultivateCourseType);
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public ActionResult delete(String id) {
        // 校验课程
        LambdaQueryWrapper<FtbCultivateCourse> queryWrapper = Wrappers.lambdaQuery();
        queryWrapper.eq(FtbCultivateCourse::getTypeId, id);
        queryWrapper.eq(FtbCultivateCourse::getEnableMark, 0);
        queryWrapper.last("limit 1");
        if (ftbCultivateCourseMapper.selectCount(queryWrapper) > 0) {
            return ActionResult.success(false);
        }
        LambdaUpdateWrapper<FtbCultivateCourseType> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(SuperBaseEntity.SuperIBaseEntity::getId, id);
        updateWrapper.set(FtbCultivateCourseType::getEnableMark, 1);
        baseMapper.update(null, updateWrapper);
        return ActionResult.success();
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateInfo(FtbCultivateCourseTypeUpdateDTO ftbCultivateCourseTypeDTO) {
        LambdaUpdateWrapper<FtbCultivateCourseType> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(SuperBaseEntity.SuperIBaseEntity::getId, ftbCultivateCourseTypeDTO.getCourseTypeId());
        updateWrapper.set(FtbCultivateCourseType::getName, ftbCultivateCourseTypeDTO.getName());
        // 新建对象，防止MybatisPlusMetaObjectHandler.updateFill方法失效
        baseMapper.update(new FtbCultivateCourseType(), updateWrapper);
    }

    @Override
    public Page<FtbCultivateCourseTypeVO> pageList(Page<FtbCultivateCourseTypeVO> page) {
        return baseMapper.pageList(page);
    }

    @Override
    public List<FtbCultivateCourseTypeVO> getAll() {
        return baseMapper.getAll();
    }


}
