@* Merged into OrdersHub — direct route only for per-user orders *@
@attribute [Route(RouteConstance.UserOrder + "{UserId:long}")]

@using CMSMicroservice.Protobuf.Protos.UserOrder
@using CMSMicroservice.Protobuf.Protos
@using BackOffice.Pages.UserOrder.Components
@using BackOffice.Common.BaseComponents
@using BackOffice.Pages.AutoComplete
@using DataModel = CMSMicroservice.Protobuf.Protos.UserOrder.GetAllUserOrderByFilterResponseModel

<BackOffice.Common.BaseComponents.BasePageComponent @ref="_basePage" OnClearFilterClick="OnFilterCleared"
                                                    OnSubmitClick="OnFilterSubmit">
    <Filters>
        <MudItem xs="12" sm="6" md="3">
            <MudNumericField HideSpinButtons="true" T="long?" Clearable="true" Label="شناسه سفارش"
                             @bind-Value="@_orderIdFilter" Variant="Variant.Outlined" Margin="Margin.Dense"/>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <UserAutoComplete Label="جستجوی کاربر" @bind-SelectedUserId="@_userIdFilter" />
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudNumericField HideSpinButtons="true" T="long?" Clearable="true" Label="شناسه تراکنش"
                             @bind-Value="@_transactionIdFilter" Variant="Variant.Outlined" Margin="Margin.Dense"/>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudNumericField HideSpinButtons="true" T="long?" Clearable="true" Label="قیمت"
                             @bind-Value="@_request.Filter.Amount" Variant="Variant.Outlined" Margin="Margin.Dense"/>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudDatePicker T="DateTime?" Label="از تاریخ پرداخت" @bind-Date="_paymentDateFrom"
                           Variant="Variant.Outlined" Margin="Margin.Dense"/>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudDatePicker T="DateTime?" Label="تا تاریخ پرداخت" @bind-Date="_paymentDateTo"
                           Variant="Variant.Outlined" Margin="Margin.Dense"/>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudSelect T="int?" Clearable="true" Label="روش پرداخت" Variant="Variant.Outlined"
                       Margin="Margin.Dense" @bind-Value="_paymentMethodFilter">
                <MudSelectItem T="int?" Value="@(0)">درگاه پرداخت</MudSelectItem>
                <MudSelectItem T="int?" Value="@(1)">کیف پول</MudSelectItem>
            </MudSelect>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudSelect T="int?" Clearable="true" Label="وضعیت پرداخت" Variant="Variant.Outlined"
                       Margin="Margin.Dense" @bind-Value="_paymentStatusFilter">
                <MudSelectItem T="int?" Value="@(0)">پرداخت شده</MudSelectItem>
                <MudSelectItem T="int?" Value="@(1)">پرداخت نشده</MudSelectItem>
            </MudSelect>
        </MudItem>
        <MudItem xs="12" sm="6" md="3">
            <MudSelect T="int?" Clearable="true" Label="وضعیت ارسال" Variant="Variant.Outlined"
                       Margin="Margin.Dense" @bind-Value="_deliveryStatusFilter">
                <MudSelectItem T="int?" Value="@(1)">در انتظار ارسال</MudSelectItem>
                <MudSelectItem T="int?" Value="@(2)">تحویل پست</MudSelectItem>
                <MudSelectItem T="int?" Value="@(3)">تحویل به مشتری</MudSelectItem>
                <MudSelectItem T="int?" Value="@(4)">مرجوع شده</MudSelectItem>
                <MudSelectItem T="int?" Value="@(5)">لغو شده</MudSelectItem>
            </MudSelect>
        </MudItem>
    </Filters>
    <Content>
        <MudDataGrid T="DataModel"
                     ServerData="@(new Func<GridState<DataModel>, Task<GridData<DataModel>>>(ServerReload))"
                     Hover="true" @ref="_gridData" Height="calc(100vh - 240px)">
            <ColGroup>
                <col/>
                <col/>
                <col/>
                <col style="width: 58px;"/>
            </ColGroup>
            <ToolBarContent>
                <MudStack Row="true" Justify="Justify.SpaceBetween" AlignItems="AlignItems.Center" Style="width:100%">
                    <MudText>لیست سفارشات</MudText>
                    <MudButton Variant="Variant.Outlined" 
                              Color="Color.Info" 
                              OnClick="ExportToExcel"
                              StartIcon="@Icons.Material.Filled.FileDownload"
                              Size="Size.Small">
                        خروجی Excel
                    </MudButton>
                </MudStack>
            </ToolBarContent>
            <Columns>
                <PropertyColumn Property="x => x.Id" Title="شناسه"/>
                <PropertyColumn Property="x => x.Amount" Title="مبلغ"/>
                @* <PropertyColumn Property="x => x.VatAmount" Title="مبلغ VAT">
                    <CellTemplate>
                        @(context.Item.VatAmount > 0 ? context.Item.VatAmount.ToString("N0") : "-")
                    </CellTemplate>
                </PropertyColumn>
                <PropertyColumn Property="x => x.VatPercentage" Title="درصد VAT">
                    <CellTemplate>
                        @(context.Item.VatPercentage > 0 ? $"{context.Item.VatPercentage:0}٪" : "-")
                    </CellTemplate>
                </PropertyColumn> *@
                <TemplateColumn Title="نام کاربر">
                    <CellTemplate>
                        @if (context.Item.UserId > 0)
                        {
                            <MudLink Href="@($"/network/user-info/{context.Item.UserId}")" Underline="Underline.Hover" Color="Color.Primary">
                                @context.Item.UserFullName
                            </MudLink>
                        }
                        else
                        {
                            <MudText>@context.Item.UserFullName</MudText>
                        }
                    </CellTemplate>
                </TemplateColumn>
                <PropertyColumn Property="x => x.UserNationalCode" Title="کدملی"/>
                <TemplateColumn Title="روش پرداخت">
                    <CellTemplate>
                        <MudChip T="string" Size="Size.Small">
                            @GetPaymentMethodText(context.Item.PaymentMethod.GetHashCode())
                        </MudChip>
                    </CellTemplate>
                </TemplateColumn>
                <PropertyColumn Property="x => x.PaymentStatus" Title="وضعیت پرداخت">
                    <CellTemplate>
                        @if (context.Item.PaymentStatus == PaymentStatus.Success)
                        {
                            <MudChip T="string" Color="Color.Success">پرداخت شده</MudChip>
                        
                        }
                        else if (context.Item.PaymentStatus == PaymentStatus.Pending)
                        {
                            <MudChip T="string" Color="Color.Success" Size="Size.Small">در انتظار پرداخت</MudChip>
                        }
                        else
                        {
                            <MudChip T="string" Color="Color.Error">پرداخت نشده</MudChip>
                        }
                    </CellTemplate>
                </PropertyColumn>
                <PropertyColumn Property="x => x.TransactionId" Title="شناسه پرداخت" CellStyle="text-wrap: nowrap;"
                                HeaderStyle="text-wrap: nowrap;"/>
                <TemplateColumn Title="تاریخ پرداخت" CellStyle="text-wrap: nowrap;" HeaderStyle="text-wrap: nowrap;">
                    <CellTemplate>
                        @if (context.Item.PaymentDate != null)
                        {
                            @(context.Item.PaymentDate.ToDateTime().MiladiToJalaliWithTime())
                        }
                        else
                        {
                            <MudText>-</MudText>
                        }
                    </CellTemplate>
                </TemplateColumn>
                <TemplateColumn Title="آدرس">
                    <CellTemplate>
                        <MudTooltip Text="@context.Item.UserAddressText">
                            <MudText Typo="Typo.body2">
                                @(string.IsNullOrWhiteSpace(context.Item.UserAddressText)
                                    ? "-"
                                    : (context.Item.UserAddressText.Length > 30
                                        ? context.Item.UserAddressText.Substring(0, 30) + "..."
                                        : context.Item.UserAddressText))
                            </MudText>
                        </MudTooltip>
                    </CellTemplate>
                </TemplateColumn>
                <TemplateColumn Title="وضعیت ارسال">
                    <CellTemplate>
                        <MudChip T="string"
                                 Size="Size.Small"
                                 Color="@GetDeliveryStatusColor(context.Item.DeliveryStatus.GetHashCode())">
                            @GetDeliveryStatusText(context.Item.DeliveryStatus.GetHashCode())
                        </MudChip>
                    </CellTemplate>
                </TemplateColumn>


                <TemplateColumn StickyLeft="true" Title="عملیات" CellStyle="text-wrap: nowrap;"
                                HeaderStyle="text-wrap: nowrap;">
                    <CellTemplate>
                        <MudStack Row="true" AlignItems="AlignItems.Center">

                            <MudTooltip Text="جزئیات سفارش">
                                <MudIconButton Icon="@Icons.Material.Filled.Info"
                                               Size="Size.Small"
                                               ButtonType="ButtonType.Button"
                                               OnClick="@(() => OpenDetails(context.Item))"
                                              />
                            </MudTooltip>

                            <MudTooltip Text="تغییر وضعیت ارسال">
                                <MudIconButton Icon="@Icons.Material.Filled.LocalShipping"
                                               Size="Size.Small"
                                               Color="Color.Primary"
                                               ButtonType="ButtonType.Button"
                                               OnClick="@(() => OpenChangeStatus(context.Item))"
                                              />
                            </MudTooltip>

                            <MudTooltip Text="اعمال تخفیف">
                                <MudIconButton Icon="@Icons.Material.Filled.PriceChange"
                                               Size="Size.Small"
                                               Color="Color.Secondary"
                                               ButtonType="ButtonType.Button"
                                               OnClick="@(() => OpenApplyDiscount(context.Item))"
                                              />
                            </MudTooltip>

                            <MudTooltip Text="لغو سفارش">
                                <MudIconButton Icon="@Icons.Material.Filled.Cancel"
                                               Size="Size.Small"
                                               Color="Color.Error"
                                               ButtonType="ButtonType.Button"
                                               OnClick="@(() => OpenCancelOrder(context.Item))"
                                              />
                            </MudTooltip>

                            <MudTooltip Text="آرشیو">
                                <MudIconButton Icon="@Icons.Material.Filled.DeleteOutline" Size="Size.Small"
                                               ButtonType="ButtonType.Button" OnClick="@(() => OnDelete(context.Item))"
                                              />
                            </MudTooltip>
                        </MudStack>
                    </CellTemplate>
                </TemplateColumn>
            </Columns>
            <NoRecordsContent>
                <MudAlert Severity="Severity.Info" Dense="true" Variant="Variant.Text" Class="my-4">موردی یافت نشد.</MudAlert>
            </NoRecordsContent>
            <PagerContent>
                <MudDataGridPager T="DataModel" PageSizeOptions=@(new int[] { 20, 50, 100 })
                                  InfoFormat="سطر {first_item} تا {last_item} از {all_items}"
                                  RowsPerPageString="تعداد در صفحه"/>
            </PagerContent>
        </MudDataGrid>

    </Content>
</BackOffice.Common.BaseComponents.BasePageComponent>
