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

@using CMSMicroservice.Protobuf.Protos.Commission
@using Google.Protobuf.WellKnownTypes
@using MudBlazor
@using BackOffice.Pages.AutoComplete

<div>
    <MudText Typo="Typo.h4" Class="mb-4"> پرداخت های کاربران</MudText>

    @* ── G11b: راهنمای پرداخت‌ها (Q28) ── *@
    <MudAlert Severity="Severity.Info" Variant="Variant.Text" Dense="true" Class="mb-3" Icon="@Icons.Material.Filled.Info">
        پاداش‌ها بر اساس هر پکیج جداگانه محاسبه می‌شود. ستون «پکیج» نشان‌دهنده پکیج منبع پاداش است.
    </MudAlert>

    <MudDataGrid T="UserCommissionPayoutModel" 
                 ServerData="@(new Func<GridState<UserCommissionPayoutModel>, Task<GridData<UserCommissionPayoutModel>>>(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" />
                <WeekNumberPicker Label="انتخاب هفته"
                                @bind-SelectedWeekDefinitionId="_filterWeekDefinitionId" />
                <MudSelect @bind-Value="_filterStatus" 
                          Label="وضعیت" 
                          Variant="Variant.Outlined" 
                          Margin="Margin.Dense"
                          Clearable="true"
                          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>
                <PackageSelect Label="پکیج"
                              @bind-SelectedPackageId="_filterPackageId" />
                <MudButton Variant="Variant.Filled" 
                          Color="Color.Primary" 
                          OnClick="ApplyFilter"
                          StartIcon="@Icons.Material.Filled.Search">
                    جستجو
                </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>ID:</strong> @context.Item.UserId
                        </MudLink>
                        <MudText Typo="Typo.caption" Color="Color.Secondary">@context.Item.UserName</MudText>
                    </MudStack>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.WeekDisplayName" Title="هفته">
                <CellTemplate>
                    <MudText Typo="Typo.body2">@context.Item.WeekDisplayName</MudText>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.PackageTitle" Title="پکیج">
                <CellTemplate>
                    <MudChip T="string" Color="Color.Tertiary" Size="Size.Small">
                        @(string.IsNullOrEmpty(context.Item.PackageTitle) ? "-" : context.Item.PackageTitle)
                    </MudChip>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.BalancesEarned" Title="بالانس‌ها">
                <CellTemplate>
                    <MudChip T="string" Color="Color.Info" Size="Size.Small">
                        @context.Item.BalancesEarned بالانس
                    </MudChip>
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.ValuePerBalance" Title="ارزش هر بالانس">
                <CellTemplate>
                    @context.Item.ValuePerBalance.ToString("N0") 
                </CellTemplate>
            </PropertyColumn>

            <PropertyColumn Property="x => x.TotalAmount" Title="مبلغ کل">
                <CellTemplate>
                    <MudText Typo="Typo.body2" Color="Color.Primary">
                        <strong>@context.Item.TotalAmount.ToString("N0") </strong>
                    </MudText>
                </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.Created" Title="تاریخ ایجاد">
                <CellTemplate>
                    @{
                        var persianDate = PersianDateTime.ConvertToPersianDateTime(context.Item.Created.ToDateTime().ToLocalTime());
                    }
                    @persianDate
                </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) @* WithdrawRequested *@
                        {
                            <MudTooltip Text="تایید برداشت">
                                <MudIconButton Icon="@Icons.Material.Filled.CheckCircle" 
                                              Size="Size.Small" 
                                              Color="Color.Success"
                                              OnClick="@(() => ApproveWithdrawal(context.Item))" />
                            </MudTooltip>
                            <MudTooltip Text="رد برداشت">
                                <MudIconButton Icon="@Icons.Material.Filled.Cancel" 
                                              Size="Size.Small" 
                                              Color="Color.Error"
                                              OnClick="@(() => RejectWithdrawal(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="UserCommissionPayoutModel" 
                             PageSizeOptions="@(new int[] { 10, 25, 50, 100 })" 
                             InfoFormat="سطر {first_item} تا {last_item} از {all_items}" 
                             RowsPerPageString="تعداد در صفحه" />
        </PagerContent>
    </MudDataGrid>
</div>
