using Microsoft.AspNetCore.Mvc; using OnlyOneAccessTemplate.Models; using OnlyOneAccessTemplate.Services; namespace OnlyOneAccessTemplate.Controllers { [Route("api/menu")] public class MenuController : ControllerBase { private readonly IModuleService _moduleService; private readonly ILogger _logger; public MenuController(IModuleService moduleService, ILogger logger) { _moduleService = moduleService; _logger = logger; } [HttpGet("converters")] public async Task GetConvertersMenu(string language = "pt") { try { var modules = await _moduleService.GetAllActiveModulesAsync(); var menuItems = modules .Where(m => m.ShowInMenu && m.IsActive) .OrderBy(m => m.MenuOrder) .ThenBy(m => m.MenuTitle) .GroupBy(m => m.MenuCategory ?? "Conversores") .Select(g => new { category = g.Key, items = g.Select(m => new { moduleId = m.ModuleId, title = GetLocalizedTitle(m, language), description = GetLocalizedDescription(m, language), icon = m.MenuIcon ?? "fas fa-exchange-alt", url = $"/{language}/{m.RequestBy}", order = m.MenuOrder, isNew = m.CreatedAt > DateTime.UtcNow.AddDays(-7), isHealthy = m.IsHealthy, version = m.Version }).ToList() }) .OrderBy(g => g.category) .ToList(); return Ok(new { success = true, menu = menuItems }); } catch (Exception ex) { _logger.LogError(ex, "Erro ao buscar menu de conversores"); return StatusCode(500, new { success = false, message = ex.Message }); } } private string GetLocalizedTitle(ModuleConfig module, string language) { if (module.SeoTitles?.ContainsKey(language) == true) return module.SeoTitles[language]; return module.MenuTitle ?? module.Name ?? "Conversor"; } private string GetLocalizedDescription(ModuleConfig module, string language) { if (module.SeoDescriptions?.ContainsKey(language) == true) return module.SeoDescriptions[language]; return module.MenuDescription ?? "Ferramenta de conversão"; } } }