package com.xinelu.applet.mapper.patientcenter;

import com.xinelu.applet.dto.nursingstationgoods.GoodsList;
import com.xinelu.applet.dto.patientcenter.PatientCenterCouponDTO;
import com.xinelu.applet.vo.coupon.CouponVO;
import com.xinelu.applet.vo.patientcenter.PatientCenterCouponVO;
import com.xinelu.applet.vo.patientcenter.PatientSignInVO;
import com.xinelu.applet.vo.patientcenter.PatientSignInfoVO;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * 个人中心Mapper接口
 *
 * @author zh
 * @date 2023-02-24
 */
public interface PatientCenterMapper {
    /**
     * 根据优惠券状态查询优惠券信息
     *
     * @param patientCenterCouponVO 用户信息及优惠券状态
     * @return List<CouponVO>
     */
    List<CouponVO> selectCouponByUseStatus(PatientCenterCouponVO patientCenterCouponVO);

    /**
     * 积分兑换 - 查询积分兑换商品
     *
     * @param integralExchangeFlag 积分兑换标识
     * @param whetherShelf         是否上架
     * @param goodsPurpose         商品用途
     * @return List<GoodsInfo>
     */
    List<GoodsList> selectGoodsByExchangeFlag(@Param("integralExchangeFlag") Integer integralExchangeFlag, @Param("whetherShelf") Integer whetherShelf, @Param("goodsPurpose") String goodsPurpose);

    /**
     * 查询优惠券表所有id（待领取优惠券）
     *
     * @return List<Long>
     */
    List<Long> selectCouponId();

    /**
     * 根据id查询用户签到信息
     *
     * @param patientId 用户id
     * @param nowDate   当前日期
     * @return 签到信息
     */
    PatientSignInVO getPatientSignInInfo(@Param("patientId") Long patientId, @Param("nowDate") LocalDate nowDate);

    /**
     * 更新用户签到天数
     *
     * @param patientId 会员id
     * @return 数量
     */
    int updateTotalSignInDays(Long patientId);

    /**
     * 修改用户账户的积分
     *
     * @param patientId 会员id
     * @param integral  积分值
     * @return 数量
     */
    int updatePatientIntegral(@Param("patientId") Long patientId, @Param("integral") Integer integral);

    /**
     * 更新用户签到天数
     *
     * @param patientId 会员id
     * @return 数量
     */
    int clearTotalSignInDays(Long patientId);

    /**
     * 获取积分返回规则
     *
     * @param patientId 用户id
     * @param nowDate   今天日期
     * @param ruleList  规则集合
     * @return com.xinyilu.nurseapplet.domain.vo.patientcenter.PatientSignInfoVO
     **/
    List<PatientSignInfoVO> selectPatientSignIn(@Param("patientId") Long patientId,
                                                @Param("nowDate") LocalDate nowDate,
                                                @Param("ruleList") List<String> ruleList);

    /**
     * 新人福利查询优惠券
     *
     * @param receiveType 新人福利标识1/
     * @return java.util.List<com.xinyilu.base.domain.coupon.Coupon>
     **/
    List<CouponVO> getCouponNewPeople(String receiveType);

    /**
     * 根据优惠券状态查询优惠券信息
     *
     * @param patientCenterCouponDTO 用户信息及优惠券状态
     * @return List<CouponVO>
     */
    List<CouponVO> getCouponByUseStatus(PatientCenterCouponDTO patientCenterCouponDTO);

    /**
     * 查询用户签到信息和积分信息
     *
     * @param patientId 会员id
     * @param nowDate   当前时间
     * @return 信息
     */
    PatientSignInfoVO getPatientSignInfo(@Param("patientId") Long patientId, @Param("nowDate") LocalDate nowDate);
}
