using ERPCore.Dtos.Hrm;

namespace ERPCore.Services.Interfaces;

/// <summary>
/// Read-only HRM aggregation reports (FR-HR-RPT, docs/13-BACKEND-HRM-API.md §6) — no
/// new entities, queries over Attendance/Payroll/Leave/Document data that already
/// exists, mirroring how StockController answers on-hand/ledger queries today.
/// </summary>
public interface IHrReportService
{
    Task<List<AttendanceSummaryRowDto>> AttendanceSummaryAsync(int periodYear, int periodMonth, int? departmentId, CancellationToken ct = default);
    Task<List<OvertimeReportRowDto>> OvertimeReportAsync(int periodYear, int periodMonth, CancellationToken ct = default);
    Task<List<LateArrivalReportRowDto>> LateArrivalReportAsync(int periodYear, int periodMonth, CancellationToken ct = default);
    Task<List<PayrollRegisterRowDto>> PayrollRegisterAsync(int payrollRunId, CancellationToken ct = default);
    Task<List<SalaryHistoryRowDto>> SalaryHistoryAsync(int employeeId, CancellationToken ct = default);
    Task<List<LeaveBalanceReportRowDto>> LeaveBalanceReportAsync(int year, CancellationToken ct = default);
    Task<List<DocumentExpiryReportRowDto>> DocumentExpiryReportAsync(int withinDays, CancellationToken ct = default);
}
