using PlanTempus.Application.Features.Localization.Services;
using PlanTempus.Application.Features.Menu.Models;

namespace PlanTempus.Application.Features.Menu.Services;

/// <summary>
/// Mock implementation of IMenuService with hardcoded menu data.
/// </summary>
public class MockMenuService : IMenuService
{
    private readonly ILocalizationService _localize;

    public MockMenuService(ILocalizationService localize)
    {
        _localize = localize;
    }

    public List<MenuGroup> GetMenuForRole(UserRole role, string? currentUrl = null)
    {
        var allGroups = GetAllMenuGroups();

        return allGroups
            .Select(g => new MenuGroup
            {
                Id = g.Id,
                Label = _localize.Get($"groups.{g.Id}"),
                SortOrder = g.SortOrder,
                Items = g.Items
                    .Where(i => role >= i.MinimumRole)
                    .Select(i => new MenuItem
                    {
                        Id = i.Id,
                        Label = _localize.Get($"menu.{i.Id}"),
                        Icon = i.Icon,
                        Url = i.Url,
                        MinimumRole = i.MinimumRole,
                        SortOrder = i.SortOrder,
                        IsActive = currentUrl != null && i.Url.Equals(currentUrl, StringComparison.OrdinalIgnoreCase)
                    })
                    .OrderBy(i => i.SortOrder)
                    .ToList()
            })
            .Where(g => g.Items.Any())
            .OrderBy(g => g.SortOrder)
            .ToList();
    }

    private static List<MenuGroup> GetAllMenuGroups()
    {
        return new List<MenuGroup>
        {
            // DASHBOARD GROUP
            new MenuGroup
            {
                Id = "dashboard",
                Label = "Dashboard",
                SortOrder = 1,
                Items = new List<MenuItem>
                {
                    new MenuItem
                    {
                        Id = "home",
                        Label = "Dashboard",
                        Icon = "ph-squares-four",
                        Url = "/",
                        MinimumRole = UserRole.Staff,
                        SortOrder = 1
                    },
                    new MenuItem
                    {
                        Id = "calendar",
                        Label = "Kalender",
                        Icon = "ph-calendar",
                        Url = "/poc-calendar.html",
                        MinimumRole = UserRole.Staff,
                        SortOrder = 2
                    },
                    new MenuItem
                    {
                        Id = "pos",
                        Label = "Kasse",
                        Icon = "ph-device-mobile",
                        Url = "/pos",
                        MinimumRole = UserRole.Staff,
                        SortOrder = 3
                    }
                }
            },

            // DATA GROUP
            new MenuGroup
            {
                Id = "data",
                Label = "Data",
                SortOrder = 2,
                Items = new List<MenuItem>
                {
                    new MenuItem
                    {
                        Id = "products",
                        Label = "Produkter & Lager",
                        Icon = "ph-package",
                        Url = "/poc-produkter.html",
                        MinimumRole = UserRole.Manager,
                        SortOrder = 1
                    },
                    new MenuItem
                    {
                        Id = "suppliers",
                        Label = "Leverandører",
                        Icon = "ph-truck",
                        Url = "/poc-leverandoerer.html",
                        MinimumRole = UserRole.Manager,
                        SortOrder = 2
                    },
                    new MenuItem
                    {
                        Id = "customers",
                        Label = "Kunder",
                        Icon = "ph-users",
                        Url = "/customers",
                        MinimumRole = UserRole.Staff,
                        SortOrder = 3
                    },
                    new MenuItem
                    {
                        Id = "employees",
                        Label = "Medarbejdere",
                        Icon = "ph-user",
                        Url = "/poc-medarbejdere.html",
                        MinimumRole = UserRole.Manager,
                        SortOrder = 4
                    }
                }
            },

            // ANALYSE GROUP
            new MenuGroup
            {
                Id = "analytics",
                Label = "Analyse",
                SortOrder = 3,
                Items = new List<MenuItem>
                {
                    new MenuItem
                    {
                        Id = "reports",
                        Label = "Statistik & Rapporter",
                        Icon = "ph-chart-bar",
                        Url = "/reports",
                        MinimumRole = UserRole.Manager,
                        SortOrder = 1
                    }
                }
            },

            // SYSTEM GROUP
            new MenuGroup
            {
                Id = "system",
                Label = "System",
                SortOrder = 4,
                Items = new List<MenuItem>
                {
                    new MenuItem
                    {
                        Id = "settings",
                        Label = "Indstillinger",
                        Icon = "ph-gear",
                        Url = "/poc-indstillinger.html",
                        MinimumRole = UserRole.Admin,
                        SortOrder = 1
                    },
                    new MenuItem
                    {
                        Id = "account",
                        Label = "Abonnement & Konto",
                        Icon = "ph-credit-card",
                        Url = "/poc-konto.html",
                        MinimumRole = UserRole.Admin,
                        SortOrder = 2
                    }
                }
            }
        };
    }
}
