package cn.iocoder.yudao.module.course.service;

import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.course.entity.SchoolCommission;
import cn.iocoder.yudao.module.course.entity.SchoolCourseOrder;
import cn.iocoder.yudao.module.course.vo.SchoolCommissionVO;
import cn.iocoder.yudao.module.course.vo.SchoolCourseOrderVO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.bind.annotation.GetMapping;

import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;

import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;

/**
 * 驾照报名订单 Service 接口
 *
 * @author 若依
 */
public interface SchoolCourseOrderService extends IService<SchoolCourseOrder> {

    /**
     * 创建驾照报名订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createSchoolCourseOrder(@Valid SchoolCourseOrderVO createReqVO);

    /**
     * 更新驾照报名订单
     *
     * @param updateReqVO 更新信息
     */
    void updateSchoolCourseOrder(@Valid SchoolCourseOrderVO updateReqVO);

    /**
     * 删除驾照报名订单
     *
     * @param id 编号
     */
    void deleteSchoolCourseOrder(String id);

    /**
     * 获得驾照报名订单
     *
     * @param id 编号
     * @return 驾照报名订单
     */
    SchoolCourseOrder getSchoolCourseOrder(String id);


    /**
     * 获得驾照报名订单分页
     *
     * @param page      分页参数
     * @param pageReqVO SchoolCourseOrderVO
     * @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.course.vo.SchoolCommissionVO>
     * @author PQZ
     * @date 10:10 2025/2/25
     **/
    IPage<SchoolCourseOrderVO> queryPage(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO);
    IPage<SchoolCourseOrderVO> queryPageNew(Page<SchoolCommissionVO> page, SchoolCourseOrderVO pageReqVO);

    /**
     * 终止订单
     *
     * @param orderNo   订单号
     * @param endReason 终止原因
     * @param endTime   终止时间
     */
    void endOrder(String orderNo, String endReason, LocalDateTime endTime);

    /**
     * 快速创建订单
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String fastCreateSchoolCourseOrder(SchoolCourseOrderVO createReqVO);

    /**
     * 根据用户id获取订单信息
     *
     * @param loginUserId 用户id
     * @return List<SchoolCourseOrderVO>
     */
    List<SchoolCourseOrderVO> getCourseByLoginUser(Long loginUserId);
    List<SchoolCourseOrderVO> getCourseByInfo(Long userId, String courseId);

    /**
     * 报名之后发送对应消息
     */
    Boolean sendOrderMessage(String studentName, String courseName, Long coachId);

    /**
     * 教练修改学员毕业时间
     */
    void updateStudentGradTime(String studentId, String gradTime);

    /**
     * 教练修改学员拿证时间
     */
    void updateStudentPassTime(String studentId, String gradTime);

}
