@*
    EN: Responsive Order Panel — Adapts to screen size automatically.
        Desktop: Renders inline as a right sidebar (pos-cart-panel).
        Tablet/Mobile: Content is injected into PosLayout's order drawer via CascadingValue.
    VI: Panel Đơn Hàng Responsive — Tự động thích ứng theo kích thước màn hình.
        Desktop: Render inline dạng sidebar phải (pos-cart-panel).
        Tablet/Mobile: Nội dung được inject vào order drawer của PosLayout qua CascadingValue.
*@
@inject IJSRuntime JS
@implements IDisposable

@* EN: Desktop view — inline sidebar / VI: View desktop — sidebar inline *@
<div class="pos-cart-panel pos-cart-panel--desktop">
    @ChildContent
</div>

@* EN: Mobile/Tablet — inject content into layout drawer
   VI: Mobile/Tablet — inject nội dung vào drawer của layout *@

@code {
    /// <summary>
    /// EN: The order panel content (cart items, totals, checkout button).
    /// VI: Nội dung panel đơn hàng (mục giỏ hàng, tổng, nút thanh toán).
    /// </summary>
    [Parameter] public RenderFragment? ChildContent { get; set; }

    /// <summary>
    /// EN: Number of items in cart — shown as badge on mobile toggle.
    /// VI: Số mục trong giỏ hàng — hiện badge trên toggle mobile.
    /// </summary>
    [Parameter] public int ItemCount { get; set; }

    /// <summary>
    /// EN: Reference to parent PosLayout for setting drawer content.
    /// VI: Tham chiếu đến PosLayout cha để set nội dung drawer.
    /// </summary>
    [CascadingParameter] public WebClientTpos.Client.Layout.PosLayout? Layout { get; set; }

    private bool _contentSet;

    protected override void OnParametersSet()
    {
        // EN: Push content to layout's order drawer for tablet/mobile
        // VI: Đẩy nội dung vào order drawer của layout cho tablet/mobile
        if (Layout is not null)
        {
            Layout.OrderPanelContent = ChildContent;
            Layout.SetOrderCount(ItemCount);
            _contentSet = true;
        }
    }

    public void Dispose()
    {
        // EN: Clean up layout reference when component is disposed
        // VI: Dọn dẹp tham chiếu layout khi component bị dispose
        if (_contentSet && Layout is not null)
        {
            Layout.OrderPanelContent = null;
            Layout.SetOrderCount(0);
        }
    }
}
