using Microsoft.AspNetCore.Mvc;
using PlanTempus.Application.Features.Localization.Services;

namespace PlanTempus.Application.Features.Dashboard.Components;

public class BookingListViewComponent : ViewComponent
{
    private readonly ILocalizationService _localization;

    public BookingListViewComponent(ILocalizationService localization)
    {
        _localization = localization;
    }

    public IViewComponentResult Invoke(string key)
    {
        var model = BookingListCatalog.Get(key, _localization);
        return View(model);
    }
}

public class BookingListViewModel
{
    public required string Key { get; init; }
    public required string Title { get; init; }
    public required string CurrentTime { get; init; }
    public required IReadOnlyList<string> BookingKeys { get; init; }
}

internal class BookingListData
{
    public required string Key { get; init; }
    public required string TitleKey { get; init; }
    public required string CurrentTime { get; init; }
    public required IReadOnlyList<string> BookingKeys { get; init; }
}

public static class BookingListCatalog
{
    private static readonly Dictionary<string, BookingListData> Lists = new()
    {
        ["todays-bookings"] = new BookingListData
        {
            Key = "todays-bookings",
            TitleKey = "dashboard.bookings.title",
            CurrentTime = "10:45",
            BookingKeys = ["booking-1", "booking-2", "booking-3", "booking-4", "booking-5", "booking-6"]
        }
    };

    public static BookingListViewModel Get(string key, ILocalizationService localization)
    {
        if (!Lists.TryGetValue(key, out var list))
            throw new KeyNotFoundException($"BookingList with key '{key}' not found");

        return new BookingListViewModel
        {
            Key = list.Key,
            Title = localization.Get(list.TitleKey),
            CurrentTime = list.CurrentTime,
            BookingKeys = list.BookingKeys
        };
    }
}
