using AyCode.Utils.Extensions;
using DevExpress.Blazor;
using FruitBank.Common.Entities;
using FruitBank.Common.SignalRs;
using FruitBankHybrid.Shared.Pages;
using Microsoft.AspNetCore.Components;

namespace FruitBankHybrid.Shared.Components.Grids.Ekaers;

public class GridEkaerHistoryBase : FruitBankGridBase<EkaerHistory>, IGrid
{
    private bool _isFirstInitializeParameterCore;
    private bool _isFirstInitializeParameters;

    /// <summary>Szerver-oldali szűrő a master-grid lekérdezéséhez (a tabok adják át). All = minden.</summary>
    [Parameter] public EkaerHistoryFilter Filter { get; set; } = EkaerHistoryFilter.All;

    public GridEkaerHistoryBase() : base()
    {
        //GetAllMessageTag = SignalRTags.GetEkaerHistories;
        AddMessageTag = SignalRTags.AddEkaerHistory;
        UpdateMessageTag = SignalRTags.UpdateEkaerHistory;

        //RemoveMessageTag = SignalRTags.;
    }

    protected override async Task OnInitializedAsync()
    {
        if (GetAllMessageTag > 0) return;

        if (IsMasterGrid)
        {
            GetAllMessageTag = SignalRTags.GetEkaerHistories;
            ContextIds = [Filter];   // szerver-oldali szűrő a tabokhoz (All = minden) — a GetEkaerHistories(filter) param-ja
        }
        else
        {
            if (ContextIds == null || ContextIds.Length == 0) ContextIds = [ParentDataItem!.Id];

            // Detail-mód: a forrás-rekord (Shipping/Order/ShippingDocument) EKÁER-deklarációi a mappingen át.
            // Megj.: az EkaerHistory már NEM hordoz per-szülő mezőt (a kapcsolat az EkaerHistoryMapping junctionben él),
            // ezért a kliens-oldali KeyFieldNameToParentId itt nem alkalmazható — a szerver-oldali szűrés
            // (GetEkaerHistoriesByForeignKey → mapping) adja a szülőhöz tartozó sorokat. (Jelenleg nincs detail-használat.)
            GetAllMessageTag = SignalRTags.GetEkaerHistoriesByForeignKey;
        }

        await base.OnInitializedAsync();
    }

    protected override void OnParametersSet()
    {
        base.OnParametersSet();

        if (!_isFirstInitializeParameters)
        {
            _isFirstInitializeParameters = false;
        }
    }

    protected override async Task SetParametersAsyncCore(ParameterView parameters)
    {
        await base.SetParametersAsyncCore(parameters);

        if (!_isFirstInitializeParameterCore)
        {
            //ShowFilterRow = true;
            //ShowGroupPanel = true;
            //AllowSort = false;

            //etc...

            _isFirstInitializeParameterCore = false;
        }
    }
}
