package com.lesingle.edu.service;

import com.lesingle.edu.dto.response.CourseReportResponse;
import com.lesingle.edu.dto.response.ReportOverviewResponse;
import com.lesingle.edu.dto.response.StudentReportResponse;
import com.lesingle.edu.dto.response.TeacherReportResponse;

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

/**
 * 学校端 - 数据报告服务接口
 */
public interface SchoolReportService {

    /**
     * 获取报告概览
     *
     * @param tenantId  租户 ID
     * @param startDate 开始日期（可选，默认本月 1 号）
     * @param endDate   结束日期（可选，默认今天）
     * @return 报告概览数据
     */
    ReportOverviewResponse getOverview(Long tenantId, LocalDate startDate, LocalDate endDate);

    /**
     * 获取教师报告列表
     *
     * @param tenantId  租户 ID
     * @param startDate 开始日期（可选，默认本月 1 号）
     * @param endDate   结束日期（可选，默认今天）
     * @param limit     返回数量限制
     * @return 教师报告列表
     */
    List<TeacherReportResponse> getTeacherReports(Long tenantId, LocalDate startDate, LocalDate endDate, int limit);

    /**
     * 获取课程报告列表
     *
     * @param tenantId  租户 ID
     * @param startDate 开始日期（可选，默认本月 1 号）
     * @param endDate   结束日期（可选，默认今天）
     * @param limit     返回数量限制
     * @return 课程报告列表
     */
    List<CourseReportResponse> getCourseReports(Long tenantId, LocalDate startDate, LocalDate endDate, int limit);

    /**
     * 获取学生报告列表
     *
     * @param tenantId  租户 ID
     * @param startDate 开始日期（可选，默认本月 1 号）
     * @param endDate   结束日期（可选，默认今天）
     * @param limit     返回数量限制
     * @return 学生报告列表
     */
    List<StudentReportResponse> getStudentReports(Long tenantId, LocalDate startDate, LocalDate endDate, int limit);
}
