/*
 * Copyright [2022] [https://www.xiaonuo.vip]
 *
 * Snowy采用APACHE LICENSE 2.0开源协议，您在使用过程中，需要注意以下几点：
 *
 * 1.请不要删除和修改根目录下的LICENSE文件。
 * 2.请不要删除和修改Snowy源码头部的版权声明。
 * 3.本项目代码可免费商业使用，商业使用请保留源码和相关描述文件的项目出处，作者声明等。
 * 4.分发源码时候，请注明软件出处 https://www.xiaonuo.vip
 * 5.不可二次分发开源参与同类竞品，如有想法可联系团队xiaonuobase@qq.com商议合作。
 * 6.若您的项目无法满足以上几点，需要更多功能代码，获取Snowy商业授权许可，请在官网购买授权，地址为 https://www.xiaonuo.vip
 */
package vip.xiaonuo.biz.modular.rebaterecord.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollStreamUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
import vip.xiaonuo.common.enums.CommonSortOrderEnum;
import vip.xiaonuo.common.exception.CommonException;
import vip.xiaonuo.common.page.CommonPageRequest;
import vip.xiaonuo.biz.modular.rebaterecord.entity.BizRebateRecord;
import vip.xiaonuo.biz.modular.rebaterecord.mapper.BizRebateRecordMapper;
import vip.xiaonuo.biz.modular.rebaterecord.param.BizRebateRecordAddParam;
import vip.xiaonuo.biz.modular.rebaterecord.param.BizRebateRecordEditParam;
import vip.xiaonuo.biz.modular.rebaterecord.param.BizRebateRecordIdParam;
import vip.xiaonuo.biz.modular.rebaterecord.param.BizRebateRecordPageParam;
import vip.xiaonuo.biz.modular.rebaterecord.service.BizRebateRecordService;

import java.util.List;

/**
 * 返利记录Service接口实现类
 *
 * @author wulei
 * @date 2025/02/06 17:39
 **/
@Service
public class BizRebateRecordServiceImpl extends ServiceImpl<BizRebateRecordMapper, BizRebateRecord> implements BizRebateRecordService {

    @Override
    public Page<BizRebateRecord> page(BizRebateRecordPageParam bizRebateRecordPageParam) {
        QueryWrapper<BizRebateRecord> queryWrapper = new QueryWrapper<BizRebateRecord>().checkSqlInjection();
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRecommendSearchKey())) {
            queryWrapper.and(s -> s.like("u2.NAME", bizRebateRecordPageParam.getRecommendSearchKey())
                    .or().like("u2.ACCOUNT", bizRebateRecordPageParam.getRecommendSearchKey()));
        }
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRechargeSearchKey())) {
            queryWrapper.and(s -> s.like("u1.NAME", bizRebateRecordPageParam.getRechargeSearchKey())
                    .or().like("u1.ACCOUNT", bizRebateRecordPageParam.getRechargeSearchKey()));
        }
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRebateStatus())) {
            queryWrapper.eq("t.rebate_status", bizRebateRecordPageParam.getRebateStatus());
        }
        // 校验数据范围
        List<String> loginUserDataScope = StpLoginUserUtil.getLoginUserDataScope();
        if (ObjectUtil.isEmpty(loginUserDataScope)) {
            queryWrapper.eq("t.recommend_user_id", StpLoginUserUtil.getLoginUser().getId());
        }
        queryWrapper.eq("t.delete_flag", CommonDeleteFlagEnum.NOT_DELETE);
        queryWrapper.orderByDesc("t.create_time");
        return baseMapper.page(CommonPageRequest.defaultPage(), queryWrapper);
    }

    @Override
    public Page<BizRebateRecord> userPage(BizRebateRecordPageParam bizRebateRecordPageParam) {
        QueryWrapper<BizRebateRecord> queryWrapper = new QueryWrapper<BizRebateRecord>().checkSqlInjection();
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRecommendSearchKey())) {
            queryWrapper.and(s -> s.like("u2.NAME", bizRebateRecordPageParam.getRecommendSearchKey())
                    .or().like("u2.ACCOUNT", bizRebateRecordPageParam.getRecommendSearchKey()));
        }
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRechargeSearchKey())) {
            queryWrapper.and(s -> s.like("u1.NAME", bizRebateRecordPageParam.getRechargeSearchKey())
                    .or().like("u1.ACCOUNT", bizRebateRecordPageParam.getRechargeSearchKey()));
        }
        if (ObjectUtil.isNotEmpty(bizRebateRecordPageParam.getRebateStatus())) {
            queryWrapper.eq("t.rebate_status", bizRebateRecordPageParam.getRebateStatus());
        }
        queryWrapper.eq("t.recommend_user_id", StpLoginUserUtil.getLoginUser().getId());
        queryWrapper.eq("t.delete_flag", CommonDeleteFlagEnum.NOT_DELETE);
        queryWrapper.orderByDesc("t.create_time");
        return baseMapper.page(CommonPageRequest.defaultPage(), queryWrapper);
    }

    @Override
    public BizRebateRecord detail(BizRebateRecordIdParam bizRebateRecordIdParam) {
        return this.queryEntity(bizRebateRecordIdParam.getId());
    }

    @Override
    public BizRebateRecord queryEntity(String id) {
        BizRebateRecord bizRebateRecord = this.getById(id);
        if (ObjectUtil.isEmpty(bizRebateRecord)) {
            throw new CommonException("返利记录不存在，id值为：{}", id);
        }
        return bizRebateRecord;
    }
}
