package com.sv.mapper;

import com.sv.annotation.PlatformKey;
import com.sv.dto.api.MemberCardDTO;
import com.sv.entity.MemberCard;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Mapper - 用户会员卡
 *
 * @author yechanglin
 * @since 2018-08-02
 */
public interface MemberCardMapper {

    /**
     * 新建用户会员卡
     *
     * @param memberCard 用户会员卡
     */
    void insert(MemberCard memberCard);

    /**
     * 更新用户会员卡
     *
     * @param memberCard 用户会员卡
     */
    void update(MemberCard memberCard);

    /**
     * 删除用户会员卡
     *
     * @param id 编号
     * @return 删除数量
     */
    int delete(Integer id);

    /**
     * 删除用户会员卡
     *
     * @param ids 编号数组
     * @return 删除数量
     */
    int deleteByIds(Integer[] ids);

    /**
     * api
     * 查询用户会员卡
     *
     * @param id 编号
     * @return 用户会员卡
     */
    MemberCard findById(Integer id);

    /**
     * 查询用户会员卡
     *
     * @return 用户会员卡集合
     */
    List<MemberCard> findAll(@Param("memberId") Integer memberId, @Param("status") Byte status,
                             @Param("veneuType") Byte veneuType,@Param("venueName") String venueName);

    /**
     * 查询用户会员卡
     *
     * @return 用户会员卡集合
     */
    List<MemberCard> findAlls(@Param("memberId") Integer memberId);


    /**
     * api 查找用户是否有激活的会员卡，且在有效期内
     * @param memberId
     * @param venueType 场馆类型
     * @param venueId 场馆id
     * @return
     */
    MemberCard findCard(@Param("memberId") Integer memberId,@Param("venueType")Integer venueType,@Param("venueId")Integer venueId);

    /**
     * api
     * 我的会员卡
     */
     List<MemberCardDTO> findAllCards(@Param("memberId")Integer memberId, @Param("venueId")Integer venueId);

    /**
     * api 查询用户对应店的会员卡
     */
    @PlatformKey
     List<MemberCard> findMemberCardByVenues(@Param("memberId")Integer memberId,@Param("venueId")Integer venueId,@Param("venueType")Integer venueType);

    /***
     * api
     * 返回用户中心会员拥有的会员卡数量
     */
    Integer findMemberCardCount(Integer memberId);

    /**
     * api 查询激活状态的卡，同家店中
     */
    MemberCard findByStatus(@Param("venueId")Integer venueId,@Param("venueType")Integer venueType,@Param("memberId")Integer memberId);

    /**
     * api 查询用户有没有对应篮球馆的可使用会员卡
     */
    List<MemberCard> findByMemberId(@Param("venueId") Integer venueId,@Param("memberId") Integer memberId);

    /**
     * api 查询用户已过期的会员卡
     */
    List<MemberCard> findAllCard();

    /**
     * api 查询用户顺延的会员卡正好是今日
     */
    List<MemberCard> findAllMemberCard(@Param("cards")List<MemberCard> cards);

    /**
     * api 批量修改用户会员卡状态
     */
    void updateStatus(@Param("status") Integer status,@Param("cards")List<MemberCard> cards);

    /**
     * api  查询用户拥有对应店的会员卡
     */
    MemberCard findCards(@Param("memberId") Integer memberId,@Param("venueId")Integer venueId,@Param("venueType")Integer venueType);
}