package jnpf.cultivate.v2.service.impl;

import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import jnpf.cultivate.mapper.FtbCultivatePromotionUserMapper;
import jnpf.cultivate.v2.service.FtbCultivatePromotionUserService;
import jnpf.model.cultivate.po.promotion.FtbCultivatePromotionUser;
import jnpf.model.cultivate.v2.promotion.vo.MyCultivatePromotionListVo;
import jnpf.model.cultivate.v2.promotion.vo.V2CultivatePromotionMemberVo;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

@Service
public class FtbCultivatePromotionUserServiceImpl extends ServiceImpl<FtbCultivatePromotionUserMapper, FtbCultivatePromotionUser> implements FtbCultivatePromotionUserService {


    /**
     * 分页查询用户信息
     *
     * @param userPage     分页对象，包含分页参数和结果数据
     * @param queryUserIds 用户ID列表，用于筛选特定用户
     * @param promotionId  推广活动ID，用于关联推广活动查询
     * @return Page<V2CultivatePromotionMemberVo> 分页结果对象，包含符合条件的用户信息列表
     */
    @Override
    public Page<V2CultivatePromotionMemberVo> queryUserForPage(Page<V2CultivatePromotionMemberVo> userPage, List<String> queryUserIds, String promotionId) {
        return baseMapper.queryUserForPage(userPage, queryUserIds, promotionId);

    }

    /**
     * 查询用户的全部推广活动列表
     *
     * @param userId 用户ID，用于查询指定用户参与的所有推广活动
     * @return List<MyCultivatePromotionListVo> 用户参与的推广活动列表
     */
    @Override
    public List<MyCultivatePromotionListVo> queryMyAllPromotionList(String userId) {
        return baseMapper.queryMyAllPromotionList(userId);
    }

    /**
     * 查询用户的指定推广活动
     *
     * @param userId      用户ID，用于查询指定用户参与的推广活动
     * @param promotionId 推广活动ID，用于查询指定的推广活动
     * @return MyCultivatePromotionListVo 用户参与的指定推广活动信息，不存在则返回null
     */
    @Override
    public MyCultivatePromotionListVo queryMyPromotionById(String userId, String promotionId) {
        return baseMapper.queryMyPromotionById(userId, promotionId);
    }

    /**
     * 完成地图
     *
     * @param userId      用户ID，用于标识完成推广的用户
     * @param promotionId 推广活动ID，用于关联推广活动信息
     * @param tenantId    租户ID，用于指定租户下的推广活动
     */
    @Override
    public void completePromotion(String userId, String promotionId, String tenantId) {
        LambdaUpdateWrapper<FtbCultivatePromotionUser> updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.eq(FtbCultivatePromotionUser::getPromotionId, promotionId)
                .eq(FtbCultivatePromotionUser::getUserId, userId)
                .eq(FtbCultivatePromotionUser::getIsComplete, 0)
                .set(FtbCultivatePromotionUser::getIsComplete, 1)
        ;
        this.update(updateWrapper);
    }

    /**
     * 查询用户的全部完成推广活动列表
     *
     * @param userId 用户ID，用于查询指定用户完成的推广活动
     * @return List<FtbCultivatePromotionUser> 用户完成的推广活动列表
     */
    @Override
    public List<String> queryMyCompletePromotion(String userId) {
        LambdaQueryWrapper<FtbCultivatePromotionUser> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(FtbCultivatePromotionUser::getUserId, userId)
                .eq(FtbCultivatePromotionUser::getIsComplete, 1);
        List<FtbCultivatePromotionUser> list = this.list(queryWrapper);
        if (CollUtil.isEmpty(list)) {
            return new ArrayList<>();
        }
        return list.stream().map(FtbCultivatePromotionUser::getPromotionId).collect(Collectors.toList());
    }

}