using AyCode.Core.Loggers;
using FruitBank.Common.Entities;
using FruitBank.Common.Models;
using FruitBankHybrid.Shared.Components.Grids.Ekaers;
using FruitBankHybrid.Shared.Databases;
using FruitBankHybrid.Shared.Services.Loggers;
using FruitBankHybrid.Shared.Services.SignalRs;
using Mango.Nop.Core.Loggers;
using Microsoft.AspNetCore.Components;

namespace FruitBankHybrid.Shared.Pages;

public partial class Ekaer : ComponentBase
{
    [Inject] public required IEnumerable<IAcLogWriterClientBase> LogWriters { get; set; }
    [Inject] public required NavigationManager NavManager { get; set; }
    [Inject] public required LoggedInModel LoggedInModel { get; set; }
    [Inject] public required FruitBankSignalRClient FruitBankSignalRClient { get; set; }

    private GridEkaerHistory gridEkaerHistoryPending;
    private GridEkaerHistory gridEkaerHistorySent;
    private GridEkaerHistory gridEkaerHistoryNeedsCompletion;

    private ILogger _logger = null!;
    public int ActiveTabIndex;

    /// <summary>Pótlásra váró (SentWithMissingData) rekordok száma a fül feliratához — hogy ránézésre látsszon, ha van pótolnivaló.</summary>
    private int _needsCompletionCount;
    public string NeedsCompletionTabText => _needsCompletionCount > 0 ? $"Pótlásra váró ({_needsCompletionCount})" : "Pótlásra váró";

    protected override async Task OnInitializedAsync()
    {
        if (!LoggedInModel.IsRevisor) NavManager.NavigateTo("/Login");

        _logger = new LoggerClient<Ekaer>(LogWriters.ToArray());
        _logger.Info("OnInitializedAsync");

        await base.OnInitializedAsync();
        await RefreshNeedsCompletionCountAsync();
    }

    protected async Task OnActiveTabChanged(int activeTabIndex)
    {
        ActiveTabIndex = activeTabIndex;
        // Fülváltáskor frissítjük a számlálót — a gridben végzett művelet (generálás/státusz-állítás) megváltoztathatta.
        await RefreshNeedsCompletionCountAsync();
    }

    /// <summary>A grid jelzi a hosszú művelet (sorok létrehozása) elejét (true) / végét (false) → az oldal Loading panelje meg/elrejtve.</summary>
    private Task OnGridBusyChanged(bool busy)
    {
        LoadingPanelVisibility.Visible = busy;
        return InvokeAsync(StateHasChanged);
    }

    /// <summary>A „Pótlásra váró" rekordok számának frissítése a fül feliratához (a count endpointról, flag-szűrővel).</summary>
    private async Task RefreshNeedsCompletionCountAsync()
    {
        try
        {
            _needsCompletionCount = await FruitBankSignalRClient.GetEkaerHistoryCount(EkaerHistoryFilter.NeedsCompletion);
            //_needsCompletionCount = await FruitBankSignalRClient.GetEkaerHistoryCount(EkaerHistoryFilter.ToSubmit);
            StateHasChanged();
        }
        catch (Exception ex)
        {
            _logger.Error($"GetEkaerHistoryCount hiba: {ex.Message}");
        }
    }
}
