@page "/commission/withdrawals"
@attribute [Authorize]

@using CMSMicroservice.Protobuf.Protos.Commission
@using BackOffice.Pages.AutoComplete

<div>
    <MudText Typo="Typo.h4" Class="mb-4">درخواست‌های برداشت</MudText>

    <MudDataGrid T="WithdrawalRequestModel" 
                 ServerData="@(new Func<GridState<WithdrawalRequestModel>, Task<GridData<WithdrawalRequestModel>>>(ServerReload))"
                 Hover="true" 
                 @ref="_gridData" 
                 Height="calc(100vh - 240px)">
        <ToolBarContent>
            <MudText Typo="Typo.h6">درخواست‌های برداشت</MudText>
            <MudSpacer />
            <MudStack Row="true" Spacing="2">
                <UserAutoComplete Label="جستجوی کاربر" 
                                @bind-SelectedUserId="_filterUserId" />
                <MudTextField T="string"
                              Clearable="true"
                              Label="شماره شبا (IBAN)"
                              @bind-Value="_filterIban"
                              Variant="Variant.Outlined"
                              Margin="Margin.Dense"
                              Style="max-width: 220px;" />
                <MudSelect @bind-Value="_filterStatus" 
                          Label="وضعیت" 
                          Variant="Variant.Outlined" 
                          Margin="Margin.Dense"
                          Style="max-width: 150px;">
                    <MudSelectItem T="int?" Value="@((int?)null)">همه</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)0)">در انتظار واریز</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)1)">واریز شده به کیف پول</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)2)">درخواست برداشت</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)3)">برداشت شده</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)4)">خطای پرداخت بانکی</MudSelectItem>
                    <MudSelectItem T="int?" Value="@((int?)5)">لغو شده</MudSelectItem>
                </MudSelect>
                <MudButton Variant="Variant.Filled" 
                          Color="Color.Primary" 
                          OnClick="ApplyFilter"
                          StartIcon="@Icons.Material.Filled.Search">
                    جستجو
                </MudButton>
                <MudButton Variant="Variant.Outlined" 
                          Color="Color.Info" 
                          OnClick="ExportToExcel"
                          StartIcon="@Icons.Material.Filled.FileDownload">
                    خروجی Excel
                </MudButton>
            </MudStack>
        </ToolBarContent>
        <Columns>
            <PropertyColumn Property="x => x.Id" Title="شناسه" />
            
            <PropertyColumn Property="x => x.UserId" Title="کاربر">
                <CellTemplate>
                    <MudStack Spacing="0">
                        <MudLink Href="@($"/network/user-info/{context.Item.UserId}")" Underline="Underline.Hover" Color="Color.Primary">
                            <strong>@context.Item.UserName</strong>
                        </MudLink>
                        <MudText Typo="Typo.caption" Color="Color.Secondary">ID: @context.Item.UserId</MudText>
                    </MudStack>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.Amount" Title="مبلغ">
                <CellTemplate>
                    <MudText Typo="Typo.body2" Color="Color.Primary">
                        <strong>@context.Item.Amount.ToString("N0") تومان</strong>
                    </MudText>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.Method" Title="روش برداشت">
                <CellTemplate>
                    <MudChip T="string" Color="Color.Info" Size="Size.Small">
                        @GetMethodText(context.Item.Method)
                    </MudChip>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.Status" Title="وضعیت">
                <CellTemplate>
                    <MudChip T="string" 
                            Color="@GetStatusColor(context.Item.Status)" 
                            Size="Size.Small">
                        @GetStatusText(context.Item.Status)
                    </MudChip>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.BankReferenceId" Title="شماره مرجع بانک" />

            <PropertyColumn Property="x => x.BankTrackingCode" Title="کد پیگیری بانکی" />

            <PropertyColumn Property="x => x.PaymentFailureReason" Title="دلیل خطای پرداخت">
                <CellTemplate>
                    @if (!string.IsNullOrWhiteSpace(context.Item.PaymentFailureReason))
                    {
                        <MudText Typo="Typo.caption" Color="Color.Error">@context.Item.PaymentFailureReason</MudText>
                    }
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.IbanNumber" Title="شماره شبا" />

            <PropertyColumn Property="x => x.RequestedAt" Title="تاریخ درخواست">
                <CellTemplate>
                    @context.Item.RequestedAt.ToDateTime().ToLocalTime().MiladiToJalaliWithTime()
                </CellTemplate>
            </PropertyColumn>

            <TemplateColumn Title="عملیات" Sortable="false">
                <CellTemplate>
                    <MudStack Row="true" Spacing="1">
                        <MudTooltip Text="مشاهده جزئیات">
                            <MudIconButton Icon="@Icons.Material.Filled.Visibility" 
                                          Size="Size.Small" 
                                          Color="Color.Info"
                                          OnClick="@(() => ViewDetails(context.Item))" />
                        </MudTooltip>
                        @if (context.Item.Status == 2)
                        {
                            <MudTooltip Text="تایید">
                                <MudIconButton Icon="@Icons.Material.Filled.Check" 
                                              Size="Size.Small" 
                                              Color="Color.Success"
                                              OnClick="@(() => ApproveRequest(context.Item))" />
                            </MudTooltip>
                            <MudTooltip Text="رد">
                                <MudIconButton Icon="@Icons.Material.Filled.Close" 
                                              Size="Size.Small" 
                                              Color="Color.Error"
                                              OnClick="@(() => RejectRequest(context.Item))" />
                            </MudTooltip>
                        }
                        @if (context.Item.Status == 2)
                        {
                            <MudTooltip Text="پردازش">
                                <MudIconButton Icon="@Icons.Material.Filled.Payment" 
                                              Size="Size.Small" 
                                              Color="Color.Primary"
                                              OnClick="@(() => ProcessRequest(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="WithdrawalRequestModel" 
                             PageSizeOptions="@(new int[] { 20, 50, 100 })" 
                             InfoFormat="سطر {first_item} تا {last_item} از {all_items}" 
                             RowsPerPageString="تعداد در صفحه" />
        </PagerContent>
    </MudDataGrid>
</div>
