@* Merged into OrdersHub *@
@attribute [Authorize(Roles = "Administrator")]

@using MudBlazor
@using CMSMicroservice.Protobuf.Protos.UserOrder
@using CMSMicroservice.Protobuf.Protos
@using Google.Protobuf.WellKnownTypes
@using DateTimeConverterCL
@using DataModel = CMSMicroservice.Protobuf.Protos.UserOrder.GetAllUserOrderByFilterResponseModel

<div>
    <MudText Typo="Typo.h4" GutterBottom="true">
        <MudIcon Icon="@Icons.Material.Filled.BarChart" Class="ml-2" />
        گزارش فروش فروشگاه
    </MudText>
    <MudText Typo="Typo.body2" Color="Color.Secondary" Class="mb-4">
        آمار فروش و وضعیت سفارش‌های فروشگاه بر اساس بازه تاریخ و وضعیت ارسال
    </MudText>

    <MudPaper Class="pa-4 mb-4">
        <MudGrid>
            <MudItem xs="12" sm="6" md="3">
                <MudDatePicker @bind-Date="_fromDate"
                               Label="از تاریخ"
                               DateFormat="yyyy/MM/dd"
                               Variant="Variant.Outlined"
                               Margin="Margin.Dense" />
            </MudItem>
            <MudItem xs="12" sm="6" md="3">
                <MudDatePicker @bind-Date="_toDate"
                               Label="تا تاریخ"
                               DateFormat="yyyy/MM/dd"
                               Variant="Variant.Outlined"
                               Margin="Margin.Dense" />
            </MudItem>
            <MudItem xs="12" sm="6" md="3">
                <MudSelect @bind-Value="_deliveryStatusFilter"
                           T="int?"
                           Label="وضعیت ارسال"
                           Clearable="true"
                           Variant="Variant.Outlined"
                           Margin="Margin.Dense">
                    <MudSelectItem T="int?" Value="@((int?)null)">همه وضعیت‌ها</MudSelectItem>
                    <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>
            <MudItem xs="12" sm="6" md="3">
                <MudSelect @bind-Value="_paymentStatusFilter"
                           T="int?"
                           Label="وضعیت پرداخت"
                           Clearable="true"
                           Variant="Variant.Outlined"
                           Margin="Margin.Dense">
                    <MudSelectItem T="int?" Value="@((int?)null)">همه</MudSelectItem>
                    <MudSelectItem T="int?" Value="@(0)">پرداخت شده</MudSelectItem>
                    <MudSelectItem T="int?" Value="@(1)">پرداخت نشده</MudSelectItem>
                </MudSelect>
            </MudItem>
        </MudGrid>

        <MudGrid Class="mt-2">
            <MudItem xs="12" sm="6" md="3" Class="d-flex align-end">
                <MudButton Variant="Variant.Filled"
                           Color="Color.Primary"
                           OnClick="LoadReports"
                           StartIcon="@Icons.Material.Filled.Search">
                    بارگذاری گزارش
                </MudButton>
            </MudItem>
            <MudItem xs="12" sm="6" md="3" Class="d-flex align-end justify-end">
                <MudButton Variant="Variant.Outlined"
                           Color="Color.Success"
                           OnClick="ExportToExcel"
                           StartIcon="@Icons.Material.Filled.Download"
                           Class="ml-2">
                    خروجی Excel
                </MudButton>
                <MudButton Variant="Variant.Outlined"
                           Color="Color.Default"
                           OnClick="ExportToPdf"
                           StartIcon="@Icons.Material.Filled.PictureAsPdf">
                    خروجی PDF
                </MudButton>
            </MudItem>
        </MudGrid>
    </MudPaper>

    @if (_loading)
    {
        <MudPaper Class="pa-4">
            <MudProgressCircular Color="Color.Primary" Indeterminate="true" />
        </MudPaper>
    }
    else if (_orders.Count == 0)
    {
        <MudAlert Severity="Severity.Info">
            هیچ سفارشی برای بازه و فیلترهای انتخاب‌شده یافت نشد.
        </MudAlert>
    }
    else
    {
        <MudGrid Class="mb-4">
            <MudItem xs="12" md="3">
                <MudPaper Elevation="1" Class="pa-4 text-center">
                    <MudText Typo="Typo.subtitle2" Color="Color.Primary">تعداد سفارش‌ها</MudText>
                    <MudText Typo="Typo.h5">@_totalOrders.ToString("N0")</MudText>
                </MudPaper>
            </MudItem>
            <MudItem xs="12" md="3">
                <MudPaper Elevation="1" Class="pa-4 text-center">
                    <MudText Typo="Typo.subtitle2" Color="Color.Success">مجموع فروش</MudText>
                    <MudText Typo="Typo.h5">@_totalSales.ToString("N0") تومان</MudText>
                </MudPaper>
            </MudItem>
            <MudItem xs="12" md="3">
                <MudPaper Elevation="1" Class="pa-4 text-center">
                    <MudText Typo="Typo.subtitle2" Color="Color.Info">میانگین مبلغ سفارش</MudText>
                    <MudText Typo="Typo.h5">@_averageOrder.ToString("N0") تومان</MudText>
                </MudPaper>
            </MudItem>
            <MudItem xs="12" md="3">
                <MudPaper Elevation="1" Class="pa-4 text-center">
                    <MudText Typo="Typo.subtitle2" Color="Color.Warning">پرداخت شده</MudText>
                    <MudText Typo="Typo.h5">@_paidCount.ToString("N0")</MudText>
                </MudPaper>
            </MudItem>
        </MudGrid>

        <MudGrid Class="mb-4">
            <MudItem xs="12" md="6">
                <MudCard>
                    <MudCardHeader>
                        <MudText Typo="Typo.h6">روند فروش</MudText>
                    </MudCardHeader>
                    <MudCardContent>
                        @if (_salesLabels.Length == 0)
                        {
                            <MudText Typo="Typo.body2" Color="Color.Secondary">
                                داده کافی برای نمایش نمودار وجود ندارد.
                            </MudText>
                        }
                        else
                        {
                            <MudChart ChartType="ChartType.Line"
                                      ChartSeries="@_salesSeries"
                                      XAxisLabels="@_salesLabels"
                                      Width="100%"
                                      Height="300px" />
                        }
                    </MudCardContent>
                </MudCard>
            </MudItem>
            <MudItem xs="12" md="6">
                <MudCard>
                    <MudCardHeader>
                        <MudText Typo="Typo.h6">وضعیت ارسال سفارش‌ها</MudText>
                    </MudCardHeader>
                    <MudCardContent>
                        @if (_statusChartLabels.Length == 0)
                        {
                            <MudText Typo="Typo.body2" Color="Color.Secondary">
                                داده کافی برای نمایش نمودار وجود ندارد.
                            </MudText>
                        }
                        else
                        {
                            <MudChart ChartType="ChartType.Bar"
                                      ChartSeries="@_statusChartSeries"
                                      XAxisLabels="@_statusChartLabels"
                                      Width="100%"
                                      Height="300px" />
                        }
                    </MudCardContent>
                </MudCard>
            </MudItem>
        </MudGrid>

        <MudGrid Class="mb-4">
            <MudItem xs="12" md="6">
                <MudCard>
                    <MudCardHeader>
                        <MudText Typo="Typo.h6">محصولات پرفروش (بر اساس مبلغ)</MudText>
                    </MudCardHeader>
                    <MudCardContent>
                        @if (_topProductLabels.Length == 0)
                        {
                            <MudText Typo="Typo.body2" Color="Color.Secondary">
                                داده کافی برای نمایش نمودار وجود ندارد.
                            </MudText>
                        }
                        else
                        {
                            <MudChart ChartType="ChartType.Bar"
                                      ChartSeries="@_topProductSeries"
                                      XAxisLabels="@_topProductLabels"
                                      Width="100%"
                                      Height="300px" />
                        }
                    </MudCardContent>
                </MudCard>
            </MudItem>
        </MudGrid>

        <MudCard>
            <MudCardHeader>
                <MudText Typo="Typo.h6">لیست سفارش‌ها</MudText>
            </MudCardHeader>
            <MudCardContent>
                <MudDataGrid T="DataModel"
                             Items="@_orders"
                             Hover="true"
                             Dense="true">
                    <Columns>
                        <PropertyColumn Property="x => x.Id" Title="شناسه" />
                        <TemplateColumn Title="تاریخ پرداخت">
                            <CellTemplate>
                                @(context.Item.PaymentDate != null ? context.Item.PaymentDate.ToDateTime().MiladiToJalaliWithTime() : "—")
                            </CellTemplate>
                        </TemplateColumn>
                        <TemplateColumn Title="نام کاربر">
                            <CellTemplate>
                                @if (context.Item.UserId > 0)
                                {
                                    <MudLink Href="@($"/network/user-info/{context.Item.UserId}")" Underline="Underline.Hover" Color="Color.Primary">
                                        @(string.IsNullOrWhiteSpace(context.Item.UserFullName) ? "—" : context.Item.UserFullName)
                                    </MudLink>
                                }
                                else
                                {
                                    <MudText>@(string.IsNullOrWhiteSpace(context.Item.UserFullName) ? "—" : context.Item.UserFullName)</MudText>
                                }
                            </CellTemplate>
                        </TemplateColumn>
                        <TemplateColumn Title="مبلغ">
                            <CellTemplate>
                                @context.Item.Amount.ToString("N0") تومان
                            </CellTemplate>
                        </TemplateColumn>
                        <TemplateColumn Title="وضعیت پرداخت">
                            <CellTemplate>
                                <MudChip T="string"
                                         Size="Size.Small"
                                         Color="@(context.Item.PaymentStatus == PaymentStatus.Success ? Color.Success : Color.Error)">
                                    @(context.Item.PaymentStatus == PaymentStatus.Success ? "پرداخت شده" : "پرداخت نشده")
                                </MudChip>
                            </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>
                    </Columns>
                    <NoRecordsContent>
                        <MudAlert Severity="Severity.Info" Dense="true" Variant="Variant.Text" Class="my-4">موردی یافت نشد.</MudAlert>
                    </NoRecordsContent>
                </MudDataGrid>
            </MudCardContent>
        </MudCard>
    }
</div>
