package com.cf.imes.module.report.dal.mysql.template;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cf.imes.framework.mybatis.core.mapper.BaseMapperX;
import com.cf.imes.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.cf.imes.framework.organ.core.aop.OrganIgnore;
import com.cf.imes.module.report.dal.dataobject.template.ReportTemplateDO;
import com.cf.imes.module.report.enums.template.ReportTemplateTypeEnum;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 报表模板信息 Mapper
 *
 * @author Gqr
 * @since 2024/7/3 11:43
 */
@Mapper
public interface ReportTemplateMapper extends BaseMapperX<ReportTemplateDO> {

    /**
     * 根据模板id查询模板
     * 普通用户用：organId+type：1 or type：0
     *
     * @param id 模板id
     * @return
     */
    @OrganIgnore
    default ReportTemplateDO selectNormalTemplateById(Long id, Long organId) {
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<ReportTemplateDO>()
                .eq(ReportTemplateDO::getId, id)
                .and(wr -> wr.or(wrapper -> wrapper
                                .eq(ReportTemplateDO::getOrganId, organId)
                                .eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
                        .or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)));
        return selectOne(queryWrapper);
    }

    /**
     * 查询模板列表
     * 普通用户用：organId+type：1 or type：0
     *
     * @param name
     * @param organId
     * @return
     */
    @OrganIgnore
    default List<ReportTemplateDO> selectNormalTemplateList(String name, Long organId) {
        LambdaQueryWrapper<ReportTemplateDO> queryWrapper = new LambdaQueryWrapperX<ReportTemplateDO>()
                .likeIfPresent(ReportTemplateDO::getName, name)
                .orderByDesc(ReportTemplateDO::getCreateTime)
                .and(wr -> wr.or(wrapper -> wrapper
                                .eq(ReportTemplateDO::getOrganId, organId)
                                .eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.CUSTOM))
                        .or(wrapper -> wrapper.eq(ReportTemplateDO::getType, ReportTemplateTypeEnum.SYSTEM)))
                // 不返回content xml，点击具体的模板中返回xml
                .select(ReportTemplateDO::getId, ReportTemplateDO::getName, ReportTemplateDO::getCreateTime, ReportTemplateDO::getRemark, ReportTemplateDO::getType);
        return selectList(queryWrapper);
    }

    /**
     * 根据id物理删除report_template
     *
     * @param id
     * @return 改动数量
     */
    @Delete("DELETE FROM report_template WHERE id = #{id}")
    int physicalDeleteById(@Param("id") Long id);
}
