using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;

namespace WebClientTpos.Client.Pages.Admin.Shop;

/// <summary>
/// EN: Shared static helpers used across Shop sub-components.
/// VI: Các helper tĩnh dùng chung cho các component con của Shop.
/// </summary>
public static class ShopHelpers
{
    public static string FormatVND(decimal val) => val.ToString("N0") + " ₫";

    public static string HexToRgb(string hex)
    {
        hex = hex.TrimStart('#');
        if (hex.Length != 6) return "0,0,0";
        return $"{Convert.ToInt32(hex[..2], 16)},{Convert.ToInt32(hex[2..4], 16)},{Convert.ToInt32(hex[4..], 16)}";
    }

    public static string DayLabel(int dow) => dow switch
    {
        0 => "CN", 1 => "T2", 2 => "T3", 3 => "T4",
        4 => "T5", 5 => "T6", 6 => "T7", _ => $"#{dow}"
    };

    public static string FormatFileSize(long b) => b < 1024 ? $"{b} B" : b < 1048576 ? $"{b / 1024.0:F1} KB" : b < 1073741824 ? $"{b / 1048576.0:F1} MB" : $"{b / 1073741824.0:F2} GB";

    public static string GetFileIcon(string? ct) => ct switch { string s when s.StartsWith("image/") => "image", string s when s.StartsWith("video/") => "video", string s when s.Contains("pdf") => "file-text", _ => "file" };

    /// <summary>
    /// EN: Translate order status to Vietnamese.
    /// VI: Dịch trạng thái đơn hàng sang tiếng Việt.
    /// </summary>
    public static string OrderStatusLabel(string? status) => status?.ToLowerInvariant() switch
    {
        "draft" => "Nháp",
        "validated" => "Chờ thanh toán",
        "paid" => "Đã thanh toán",
        "processing" => "Đang xử lý",
        "completed" => "Hoàn thành",
        "cancelled" => "Đã hủy",
        "paymentpending" => "Chờ xác nhận TT",
        _ => status ?? "—"
    };

    /// <summary>
    /// EN: Get CSS badge class for order status.
    /// VI: Lấy CSS badge class cho trạng thái đơn hàng.
    /// </summary>
    public static string OrderStatusBadge(string? status) => status?.ToLowerInvariant() switch
    {
        "completed" or "paid" => "online",
        "validated" or "processing" or "paymentpending" => "setup",
        "cancelled" => "paused",
        _ => "setup"
    };

    /// <summary>
    /// EN: Translate payment method to Vietnamese.
    /// VI: Dịch hình thức thanh toán sang tiếng Việt.
    /// </summary>
    public static string PaymentMethodLabel(string? method) => method?.ToLowerInvariant() switch
    {
        "cash" => "Tiền mặt",
        "card" => "Thẻ",
        "qr" => "Mã QR",
        "transfer" or "bank_transfer" => "Chuyển khoản",
        "vnpay" => "VNPay",
        "momo" => "MoMo",
        _ => string.IsNullOrEmpty(method) ? "Chưa thanh toán" : method
    };
}
