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

namespace PlanTempus.Application.Features.Services.Components;

public class ServiceDetailHeaderViewComponent : ViewComponent
{
    private readonly ILocalizationService _localization;

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

    public IViewComponentResult Invoke(string key)
    {
        var service = ServiceDetailCatalog.Get(key);

        var model = new ServiceDetailHeaderViewModel
        {
            Name = service.Name,
            IsActive = service.IsActive,
            StatusText = service.IsActive
                ? _localization.Get("services.detail.header.active")
                : _localization.Get("services.detail.header.inactive"),
            DurationRange = service.DurationRange,
            FromPrice = service.FromPrice,
            EmployeeCount = service.EmployeeCount,
            BookingsThisYear = service.BookingsThisYear,
            LabelDuration = _localization.Get("services.detail.header.duration"),
            LabelFromPrice = _localization.Get("services.detail.header.fromPrice"),
            LabelEmployees = _localization.Get("services.detail.header.employees"),
            LabelBookingsThisYear = _localization.Get("services.detail.header.bookingsThisYear"),
            Tags = service.Tags.Select(t => new ServiceTagViewModel { Text = t.Text, CssClass = t.CssClass }).ToList()
        };

        return View(model);
    }
}

public class ServiceDetailHeaderViewModel
{
    public required string Name { get; init; }
    public required bool IsActive { get; init; }
    public required string StatusText { get; init; }
    public required string DurationRange { get; init; }
    public required string FromPrice { get; init; }
    public required string EmployeeCount { get; init; }
    public required string BookingsThisYear { get; init; }
    public required string LabelDuration { get; init; }
    public required string LabelFromPrice { get; init; }
    public required string LabelEmployees { get; init; }
    public required string LabelBookingsThisYear { get; init; }
    public List<ServiceTagViewModel> Tags { get; init; } = new();
}

public class ServiceTagViewModel
{
    public required string Text { get; init; }
    public required string CssClass { get; init; }
}
