/**
 * Форматтеры для биллинга. Экспортируются для использования в нескольких
 * sub-components BillingView (BalanceCard, TransactionsTable, InvoicesTable).
 * Sprint 4 Phase B/2 — split BillingView.
 */
import type { BillingTransaction, InvoiceFormat, TxStatus } from './mockBilling';

/** «5000» → «5 000 ₽» (без знака). */
export function formatPlain(cost: number): string {
    return new Intl.NumberFormat('ru-RU').format(cost) + ' ₽';
}

/** Знаковый формат: «+ 5 000 ₽» / «− 6 600 ₽» / «0 ₽». */
export function formatCost(cost: number): string {
    const sign = cost > 0 ? '+ ' : cost < 0 ? '− ' : '';
    return sign + new Intl.NumberFormat('ru-RU').format(Math.abs(cost)) + ' ₽';
}

/** CSS-класс для суммы транзакции по статусу/знаку. */
export function txAmountClass(tx: BillingTransaction): string {
    if (tx.status === 'rejected') return 'tx-amount-neutral';
    if (tx.amount > 0) return 'tx-amount-up';
    if (tx.amount < 0) return 'tx-amount-down';
    return 'tx-amount-neutral';
}

/** Vuetify-цвет чипа статуса транзакции. */
export function statusChipColor(status: TxStatus): string {
    if (status === 'pending') return 'warning';
    if (status === 'completed') return 'success';
    return 'error';
}

/** Локализованный лейбл статуса транзакции. */
export function statusLabel(status: TxStatus): string {
    if (status === 'pending') return 'В обработке';
    if (status === 'completed') return 'Проведён';
    return 'Отклонено';
}

/** Лейбл формата файла счёта/УПД (PDF / 1С 8.3 XML). */
export function formatLabel(format: InvoiceFormat): string {
    if (format === 'pdf') return 'PDF';
    return '1С 8.3 XML';
}

/** Иконка формата файла счёта/УПД. */
export function formatIcon(format: InvoiceFormat): string {
    if (format === 'pdf') return 'mdi-file-pdf-box';
    return 'mdi-xml';
}
