package com.reading.platform.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.reading.platform.dto.request.SchedulePlanCreateRequest;
import com.reading.platform.dto.request.ScheduleTemplateApplyRequest;
import com.reading.platform.entity.SchedulePlan;
import com.reading.platform.entity.ScheduleTemplate;

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

/**
 * 课表服务接口
 */
public interface ScheduleService extends IService<SchedulePlan> {

    /**
     * 获取课表计划分页
     */
    Page<SchedulePlan> getSchedulePlans(int pageNum, int pageSize, String tenantId, String classId);

    /**
     * 获取课表计划分页（按日期范围）
     */
    Page<SchedulePlan> getSchedulePlans(int pageNum, int pageSize, String tenantId, String classId, LocalDate startDate, LocalDate endDate);

    /**
     * 根据 ID 获取课表计划
     */
    SchedulePlan getSchedulePlanById(String id);

    /**
     * 创建课表计划
     */
    SchedulePlan createSchedulePlan(String tenantId, SchedulePlan plan);

    /**
     * 创建课表计划
     */
    SchedulePlan createSchedulePlan(String tenantId, String userId, SchedulePlanCreateRequest request);

    /**
     * 更新课表计划
     */
    SchedulePlan updateSchedulePlan(String id, SchedulePlan plan);

    /**
     * 删除课表计划
     */
    void deleteSchedulePlan(String id);

    /**
     * 批量创建课表计划
     */
    List<SchedulePlan> batchCreateSchedules(String tenantId, String userId, List<SchedulePlanCreateRequest> requests);

    /**
     * 获取课表
     */
    List<Map<String, Object>> getTimetable(String tenantId, LocalDate startDate, LocalDate endDate, String classId);

    /**
     * 获取课表模板分页
     */
    Page<ScheduleTemplate> getScheduleTemplates(int pageNum, int pageSize, String tenantId);

    /**
     * 根据 ID 获取课表模板
     */
    ScheduleTemplate getScheduleTemplateById(String id);

    /**
     * 创建课表模板
     */
    ScheduleTemplate createScheduleTemplate(String tenantId, ScheduleTemplate template);

    /**
     * 更新课表模板
     */
    ScheduleTemplate updateScheduleTemplate(String id, ScheduleTemplate template);

    /**
     * 删除课表模板
     */
    void deleteScheduleTemplate(String id);

    /**
     * 应用课表模板
     */
    List<SchedulePlan> applyScheduleTemplate(String tenantId, String templateId, ScheduleTemplateApplyRequest request);
}
