using Microsoft.AspNetCore.Components;
using DateTimeConverterCL;
using FrontOffice.Main.Utilities;

namespace FrontOffice.Main.Pages.DiscountStore;

public partial class OrderDetail
{
    [Parameter] public long Id { get; set; }
    
    [SupplyParameterFromQuery(Name = "payment")]
    public string? PaymentResult { get; set; }

    [Inject] private DiscountOrderService DiscountOrderService { get; set; } = default!;
    [Inject] private VATService VAT { get; set; } = default!;

    private DiscountOrderDetail? _order;
    private bool _loading = true;
    private string? _paymentMessage;
    private MudBlazor.Severity _paymentSeverity;

    protected override async Task OnAfterRenderAsync(bool firstRender)
    {
        if (firstRender)
        {
            await VAT.LoadAsync();
            StateHasChanged();
        }
    }

    /// <summary>مبلغ قبل از مالیات (جمع کل - اعتبار)</summary>
    private long PreVatGateway => _order is null ? 0 : (_order.TotalPrice - _order.DiscountBalanceUsed);

    /// <summary>مالیات بر ارزش افزوده</summary>
    private long OrderVatAmount => VAT.CalculateVAT(PreVatGateway);

    protected override async Task OnInitializedAsync()
    {
        // نمایش پیام نتیجه پرداخت (بعد از بازگشت از درگاه)
        if (!string.IsNullOrEmpty(PaymentResult))
        {
            switch (PaymentResult.ToLower())
            {
                case "success":
                    _paymentMessage = "پرداخت با موفقیت انجام شد! سفارش شما ثبت نهایی شد.";
                    _paymentSeverity = MudBlazor.Severity.Success;
                    break;
                case "failed":
                    _paymentMessage = "پرداخت ناموفق بود. مبلغ رزرو شده آزاد خواهد شد.";
                    _paymentSeverity = MudBlazor.Severity.Error;
                    break;
                case "error":
                    _paymentMessage = "خطایی در پردازش پرداخت رخ داد. لطفاً با پشتیبانی تماس بگیرید.";
                    _paymentSeverity = MudBlazor.Severity.Warning;
                    break;
            }
        }

        await LoadOrderAsync();
    }

    private async Task LoadOrderAsync()
    {
        _loading = true;
        try
        {
            _order = await DiscountOrderService.GetOrderByIdAsync(Id);
        }
        catch
        {
            Snackbar.Add("خطا در بارگذاری سفارش", MudBlazor.Severity.Error);
        }
        finally
        {
            _loading = false;
        }
    }

    private static string FormatPrice(long price) => $"{price:N0} تومان";

    private static string FormatDate(DateTime date)
    {
        try
        {
            return date.ToLocalTime().MiladiToJalaliWithTime();
        }
        catch
        {
            return date.ToString("yyyy/MM/dd");
        }
    }
}
