package com.sv.mapper;

import com.sv.annotation.PlatformKey;
import com.sv.dto.api.VenueLessonDTO;
import com.sv.dto.oms.VenueLessonOmsDTO;
import com.sv.entity.MemberLessonTicket;
import com.sv.entity.VenueLesson;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * Mapper - 场馆课程
 *
 * @author zhaoziyu
 * @since 2018-08-06
 */
public interface VenueLessonMapper {

    /**
     * 新建场馆课程
     *
     * @param venueLesson 场馆课程
     */
    void insert(VenueLesson venueLesson);

    /**
     * 更新场馆课程
     *
     * @param venueLesson 场馆课程
     */
    void update(VenueLesson venueLesson);

    /**
     * 删除场馆课程
     *
     * @param id 编号
     * @return 删除数量
     */
    int delete(Integer id);

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

    /**
     * api
     * 查询场馆课程
     *
     * @param id 编号
     * @return 场馆课程
     */
    VenueLesson findById(Integer id);

    /**
     * 查询场馆课程
     *
     * @return 场馆课程集合
     */
    List<VenueLesson> findAll();

    List<VenueLessonOmsDTO> findAllForOms(@Param("leftTime") String leftTime,@Param("rightTime") String rightTime);

    VenueLessonOmsDTO findByIdForOms(@Param("id") Integer id);

    void deleteImagesById(@Param("id") Integer id);

    void insertImages(@Param("urls") List<String> urls,@Param("lessonId") Integer lessonId);

    Integer countByTime(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("venueId") Integer venueId,@Param("venueType") Integer venueType,@Param("lessonId") Integer excludeLessonId,@Param("date") String date);

    Integer countByTimeAndCoach(@Param("startTime") String startTime,@Param("endTime") String endTime,@Param("lessonId") Integer excludeLessonId,@Param("date") String date,@Param("coachId") Integer coachId);

    /**
     * api 查询对应场馆课程的上周，这周下2周数据，从周一开始，周日结束
     */
    List<VenueLesson> findShow(@Param("starTime") String starTime,@Param("endTime") String endTime, @Param("venueId") Integer venueId,@Param("type") Integer type);

    /**
     * api 查询预约课程上课时间对应的课程信息
     */
    List<VenueLessonDTO> lessonShow(@Param("date")String date,@Param("venueId") Integer venueId,@Param("type")Integer type);

    /**
     * api 查询课程详情
     */
    @PlatformKey("le.platform_id")
    VenueLessonDTO findByLessonId(Integer lessonId);

    /**
     * api 显示预约订单
     */
    @PlatformKey("vl.platform_id")
    VenueLessonDTO findByLessonAndMemberCard(@Param("venueId") Integer venueId,@Param("venueType")Integer venueType,@Param("lessonId")Integer lessonId);

    /**
     * api 查找用户预约对应的课程信息
     */
    VenueLesson findMemberBillById(Integer id);

    /**
     * api 修改课程销售数量
     */
    void updateSaleNumById(@Param("lessonId") Integer lessonId,@Param("num") Integer num);

    /**
     * api 签到查询对应的课程
     */
    VenueLesson findLessonByTime(@Param("coachId") Integer coachId,@Param("nowDate")String nowDate,@Param("nowTime")String nowTime);

    Integer countByCoachId(@Param("coachId") Integer coachId);

    /**
     * api 查询当前日期，是否可预约
     */
    List<VenueLesson> findBook(@Param("venueId") Integer venueId, @Param("type")Integer type, @Param("date")String date);

    /**
     * 查询是否有课
     * @param venueId
     * @param type
     * @param date
     * @return
     */
    Integer findBooks(@Param("venueId") Integer venueId, @Param("type")Integer type, @Param("date")String date);
    /**
     * api 修改库存
     */
    void updateSaleNumBy(@Param("num")Integer num,@Param("lessonId") Integer lessonId);
}