using Microsoft.AspNetCore.Components;

namespace WebClientTpos.Client.Pages.Marketing;

/// <summary>
/// EN: Base class for all Marketing pages — provides navigation, formatting helpers.
/// VI: Lớp cơ sở cho tất cả trang Marketing — cung cấp điều hướng, định dạng số liệu.
/// </summary>
public abstract class MarketingBase : ComponentBase
{
    [Inject] protected NavigationManager NavigationManager { get; set; } = default!;

    /// <summary>
    /// EN: Page title shown in topbar. / VI: Tiêu đề trang.
    /// </summary>
    protected string PageTitle { get; set; } = string.Empty;

    /// <summary>
    /// EN: Page subtitle. / VI: Phụ đề trang.
    /// </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: Navigate to a marketing sub-page.
    /// VI: Điều hướng đến trang con marketing.
    /// </summary>
    protected void NavigateTo(string path)
    {
        NavigationManager.NavigateTo($"/marketing/{path}");
    }

    /// <summary>
    /// EN: Format large numbers (1.2K, 45.2K, 1.5M).
    /// VI: Định dạng số lớn.
    /// </summary>
    protected static string FormatNumber(double value)
    {
        if (value >= 1_000_000) return $"{value / 1_000_000:0.#}M";
        if (value >= 1_000) return $"{value / 1_000:0.#}K";
        return value.ToString("N0");
    }

    /// <summary>
    /// EN: Format percentage with sign. / VI: Định dạng phần trăm có dấu.
    /// </summary>
    protected static string FormatPercent(double value)
    {
        var sign = value >= 0 ? "+" : "";
        return $"{sign}{value:0.#}%";
    }

    /// <summary>
    /// EN: Get today formatted. / VI: Ngày hôm nay.
    /// </summary>
    protected static string GetTodayFormatted()
    {
        return DateTime.Now.ToString("dd/MM/yyyy");
    }
}
