package com.sv.mapper;

import com.sv.annotation.PlatformKey;
import com.sv.dto.api.MemberLessonTicketDTO;
import com.sv.dto.api.MemberLessonTicketDetailDTO;
import com.sv.entity.MemberLessonTicket;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Mapper - 用户预约的场馆课程票号
 *
 * @author lihong
 * @since 2018-08-06
 */
public interface MemberLessonTicketMapper {

    /**
     * 新建用户预约的场馆课程票号
     *
     * @param memberLessonTicket 用户预约的场馆课程票号
     */
    void insert(MemberLessonTicket memberLessonTicket);

    /**
     * 更新用户预约的场馆课程票号
     *
     * @param memberLessonTicket 用户预约的场馆课程票号
     */
    void update(MemberLessonTicket memberLessonTicket);

    /**
     * 删除用户预约的场馆课程票号
     *
     * @param id 编号
     * @return 删除数量
     */
    int delete(Integer id);

    /**
     * 删除用户预约的场馆课程票号
     *
     * @param ids 编号数组
     * @return 删除数量
     */
    int deleteByIds(Integer[] ids);

    /**
     * 查询用户预约的场馆课程票号
     *
     * @param id 编号
     * @return 用户预约的场馆课程票号
     */
    MemberLessonTicket findById(Integer id);

    /**
     * 查询用户预约的场馆课程票号
     *
     * @return 用户预约的场馆课程票号集合
     */
    List<MemberLessonTicket> findAll();

    /**
     * oms
     *
     * @return 用户预约的场馆课程票号集合
     */
    List<MemberLessonTicket> findAlls(@Param("payStatus") Integer payStatus,
                                      @Param("starTime") String starTime, @Param("endTime") String endTime,
                                      @Param("orderSn") String orderSn,@Param("lessonname") String lessonname,
                                      @Param("lessonId") Integer lessonId);

    /**
     * 更新状态
     *
     * @param ids 编号
     * @param status 状态
     * @return 更新数量
     */
    int updateStatus(@Param("ids") Integer[] ids, @Param("status") Byte status);

    /**
     * api根据订单号，查找‘用户预约的场馆课程票号’记录
     */
    List<MemberLessonTicket> findByOrderSn(@Param("orderSn") String orderSn);

    /**
     * api修改‘用户预约的场馆课程票号’支付状态：已支付
     */
    void updateTicketStatus(@Param("memberLessonTickets") List<MemberLessonTicket> memberLessonTickets);

    /**
     * api 用户预约记录
     */
    @PlatformKey("st.platform_id")
    List<MemberLessonTicketDTO> findMemberLessonTicketReserve(@Param("memberId") Integer memberId,@Param("status") Integer status);

    /**
     * api 预约详情页
     */
    MemberLessonTicketDetailDTO memberLessonTicketDetail(@Param("memberId") Integer memberId, @Param("orderSn") String orderSn);

    /**
     *api  修改用户预约课程的使用状态
     */
    void updateMemberLessonTicketStatus(@Param("memberLessonTickets") List<MemberLessonTicket> memberLessonTickets,@Param("status")Integer status);

    /**
     * api 判断用户当天是否取消过预约
     */
    List<MemberLessonTicket> findCancelNumber(Integer memberId);

    /**
     * api 查询用户当天是否使用过免费卡
     */
    List<MemberLessonTicket> findByMemberId(@Param("memberId") Integer memberId);

    /**
     * 查询用户预约的当前课程，根据用户id,课程ID
     */
    List<MemberLessonTicket> findByMemberIdAndLessonId(@Param("memberId") Integer memberId, @Param("lessonId") Integer lessonId);

    /**
     * api 查询所有未支付订单
     */
    List<MemberLessonTicket> findOrders();
    /**
     * api 查询所有未支付订单，课程ID
     */
    List<MemberLessonTicket> findOrdersLessonId();
    /**
     * 未支付课程数量
     */
    Integer lessonNum(Integer lessonId);

    /**
     * api 判断当天内,是否使用会员卡购买过该课程
     */
    Integer findBuyByCard(@Param("memberId")Integer memberId,@Param("lessonId") Integer lessonId);

    /**
     * api 查询所有预约课程的用户，签到状态
     */
    List<MemberLessonTicketDTO> findAllExpired();

    /**
     * api 修改用于已过期，但未签到的课程状态为3
     */
    void updateMemberStatus(@Param("id") Integer id);

    /**
     * 判断，用户是否购买过课程价格为0的
     */
    Integer findByZero(@Param("memberId") Integer memberId,@Param("lessonId") Integer lessonId);

    List<MemberLessonTicketDetailDTO> findTicketByStatusAndTime(@Param("memberId") Integer memberId,@Param("status") Integer status,@Param("startDate") String startDate,@Param("endDate") String endDate);
}