using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using eprintServer.Services; using eprintServer.DTOs; using eprintServer.Enums; using eprintServer.Responses; namespace eprintServer.Controllers; [ApiController] [Route("api/[controller]")] [Authorize(Roles = "ADMIN,SUB_ADMIN")] public class AdminStatsController : ControllerBase { private readonly StatsService _statsService; public AdminStatsController( StatsService statsService) { _statsService = statsService; } [HttpGet("admin-dashboard-stats")] public async Task> GetSummary() { var stats = await _statsService.GetDashboardStatsAsync(); return Ok(stats); } [HttpGet("test")] public async Task TestProcessAndSendReport( [FromQuery] ReportDateEum type, [FromQuery] string adminEmail) { if (string.IsNullOrWhiteSpace(adminEmail)) return BadRequest("adminEmail is required"); await _statsService.ProcessAndSendReport(type, adminEmail); return Ok(new { message = "Report processed and sent successfully", type, adminEmail }); } [HttpGet("reports/top-products")] public async Task>> GetTopProducts( [FromQuery] bool SellableProduct, [FromQuery] DateTime? startFilterDate, [FromQuery] DateTime? endFilterDate, [FromQuery] int page = 1, [FromQuery] int size = 10) { var report = await _statsService.GetProductStatsAsync( SellableProduct, startFilterDate, endFilterDate, page, size ); return Ok(report); } [HttpGet("reports/overview")] public async Task> GetDashboardOverview() { var stats = await _statsService.GetGeneralDashboardStatsAsync(); return Ok(stats); } }