using Microsoft.AspNetCore.Components;
using Microsoft.Extensions.Localization;

namespace WebClientTpos.Client.Pages.Admin;

/// <summary>
/// EN: Base class for all Admin pages — provides common sidebar state, page title, search.
/// VI: Lớp cơ sở cho tất cả trang Admin — cung cấp trạng thái sidebar, tiêu đề, tìm kiếm.
/// </summary>
public abstract class AdminBase : ComponentBase
{
    [Inject] protected NavigationManager NavigationManager { get; set; } = default!;
    [Inject] protected Services.AuthService AuthService { get; set; } = default!;

    /// <summary>
    /// EN: Restore auth session from localStorage so API calls have JWT token.
    ///     Subclasses that override OnInitializedAsync MUST call base.OnInitializedAsync().
    /// VI: Khôi phục session auth từ localStorage để API calls có JWT token.
    ///     Các lớp con override OnInitializedAsync PHẢI gọi base.OnInitializedAsync().
    /// </summary>
    protected override async Task OnInitializedAsync()
    {
        await AuthService.TryRestoreSessionAsync("owner");
    }
    
    /// <summary>
    /// EN: Page title shown in topbar.
    /// VI: Tiêu đề trang hiển thị trên topbar.
    /// </summary>
    protected string PageTitle { get; set; } = string.Empty;
    
    /// <summary>
    /// EN: Page subtitle shown in topbar.
    /// VI: Phụ đề trang hiển thị trên topbar.
    /// </summary>
    protected string PageSubtitle { get; set; } = string.Empty;
    
    /// <summary>
    /// EN: Search query.
    /// VI: Truy vấn tìm kiếm.
    /// </summary>
    protected string SearchQuery { get; set; } = string.Empty;
    
    /// <summary>
    /// EN: Whether the page is loading data.
    /// VI: Trang có đang tải dữ liệu không.
    /// </summary>
    protected bool IsLoading { get; set; } = false;

    /// <summary>
    /// EN: Navigate to an admin sub-page.
    /// VI: Điều hướng đến trang con admin.
    /// </summary>
    protected void NavigateTo(string path)
    {
        NavigationManager.NavigateTo($"/admin/{path}");
    }
    
    /// <summary>
    /// EN: Format Vietnamese currency.
    /// VI: Định dạng tiền tệ VND.
    /// </summary>
    protected static string FormatCurrency(decimal amount)
    {
        if (amount >= 1_000_000_000)
            return $"{amount / 1_000_000_000:0.#}B";
        if (amount >= 1_000_000)
            return $"{amount / 1_000_000:0.#}M";
        if (amount >= 1_000)
            return $"{amount / 1_000:0.#}K";
        return amount.ToString("N0");
    }

    /// <summary>
    /// EN: Get today's date formatted in Vietnamese.
    /// VI: Lấy ngày hôm nay định dạng tiếng Việt.
    /// </summary>
    protected static string GetTodayFormatted()
    {
        return DateTime.Now.ToString("dd/MM/yyyy");
    }
}
