@using BackOffice.Services.DiscountOrder

<MudDialog>
    <TitleContent>
        <MudText Typo="Typo.h6">
            <MudIcon Icon="@Icons.Material.Filled.Edit" Class="ml-2" />
            تغییر وضعیت سفارش #@OrderId
        </MudText>
    </TitleContent>
    <DialogContent>
        <MudForm @ref="_form" @bind-IsValid="@_isValid">
            <MudGrid>
                <MudItem xs="12">
                    <MudAlert Severity="Severity.Info" Dense="true">
                        وضعیت فعلی: <strong>@GetStatusText(CurrentStatus)</strong>
                    </MudAlert>
                </MudItem>

                <MudItem xs="12">
                    <MudSelect @bind-Value="Model.Status" 
                               Label="وضعیت جدید *" 
                               Required="true"
                               Variant="Variant.Outlined">
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Pending">در انتظار پرداخت</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Paid">پرداخت شده</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Processing">در حال آماده‌سازی</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Shipped">ارسال شده</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Delivered">تحویل داده شده</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Cancelled">لغو شده</MudSelectItem>
                        <MudSelectItem T="OrderStatus" Value="@OrderStatus.Returned">مرجوع شده</MudSelectItem>
                    </MudSelect>
                </MudItem>

                <MudItem xs="12">
                    <MudTextField @bind-Value="Model.AdminNotes" 
                                  Label="یادداشت ادمین" 
                                  Lines="4"
                                  Variant="Variant.Outlined"
                                  HelperText="دلیل تغییر وضعیت یا توضیحات اضافی" />
                </MudItem>

                <MudItem xs="12">
                    <MudTextField @bind-Value="Model.TrackingCode" 
                                  Label="کد رهگیری مرسوله" 
                                  Variant="Variant.Outlined"
                                  HelperText="در صورت ارسال، کد رهگیری را وارد کنید" />
                </MudItem>

                @if (Model.Status == OrderStatus.Cancelled || Model.Status == OrderStatus.Returned)
                {
                    <MudItem xs="12">
                        <MudAlert Severity="Severity.Warning">
                            <MudText>توجه: در صورت لغو یا مرجوعی سفارش، موجودی محصولات به انبار بازگردانده می‌شود.</MudText>
                        </MudAlert>
                    </MudItem>
                }

                @if (Model.Status == OrderStatus.Shipped)
                {
                    <MudItem xs="12">
                        <MudAlert Severity="Severity.Info">
                            <MudText>پس از تغییر وضعیت به "ارسال شده"، اطلاع‌رسانی به کاربر ارسال خواهد شد.</MudText>
                        </MudAlert>
                    </MudItem>
                }
            </MudGrid>
        </MudForm>
    </DialogContent>
    <DialogActions>
        <MudButton OnClick="Cancel" Variant="Variant.Text">انصراف</MudButton>
        <MudButton OnClick="Submit" 
                   Variant="Variant.Filled" 
                   Color="@GetStatusColor(Model.Status)" 
                   Disabled="@(!_isValid || _loading)">
            @if (_loading)
            {
                <MudProgressCircular Size="Size.Small" Indeterminate="true" />
            }
            else
            {
                <text>تغییر وضعیت</text>
            }
        </MudButton>
    </DialogActions>
</MudDialog>

@code {
    [CascadingParameter] IMudDialogInstance MudDialog { get; set; } = null!;
    [Parameter] public long OrderId { get; set; }
    [Parameter] public OrderStatus CurrentStatus { get; set; }

    private MudForm? _form;
    private bool _isValid;
    private bool _loading;
    private UpdateOrderStatusDto Model = new();

    protected override void OnInitialized()
    {
        Model.Status = CurrentStatus;
    }

    private async Task Submit()
    {
        if (_form != null)
        {
            await _form.Validate();
            if (!_isValid) return;
        }

        _loading = true;
        MudDialog.Close(DialogResult.Ok(Model));
        _loading = false;
    }

    private void Cancel()
    {
        MudDialog.Cancel();
    }

    private Color GetStatusColor(OrderStatus status)
    {
        return status switch
        {
            OrderStatus.Pending => Color.Warning,
            OrderStatus.Paid => Color.Info,
            OrderStatus.Processing => Color.Primary,
            OrderStatus.Shipped => Color.Secondary,
            OrderStatus.Delivered => Color.Success,
            OrderStatus.Cancelled => Color.Error,
            OrderStatus.Returned => Color.Dark,
            _ => Color.Default
        };
    }

    private string GetStatusText(OrderStatus status)
    {
        return status switch
        {
            OrderStatus.Pending => "در انتظار پرداخت",
            OrderStatus.Paid => "پرداخت شده",
            OrderStatus.Processing => "در حال آماده‌سازی",
            OrderStatus.Shipped => "ارسال شده",
            OrderStatus.Delivered => "تحویل داده شده",
            OrderStatus.Cancelled => "لغو شده",
            OrderStatus.Returned => "مرجوع شده",
            _ => "نامشخص"
        };
    }
}
