import Foundation

/// Сводка по торговой паре из `GET /market/symbol-thumb`.
///
/// Нюанс нейминга: API Rapira меняет местами base и quote относительно
/// привычной терминологии — для пары "BTC/USDT" `quoteCurrency == "BTC"`
/// (монета), а `baseCurrency == "USDT"` (валюта, в которой выражена цена).
struct SymbolThumb: Codable, Identifiable, Sendable {
    var id: String { symbol }

    let symbol: String
    let open: Double
    let high: Double
    let low: Double
    let close: Double
    /// Относительное изменение за 24ч (0.0234 == +2.34%).
    let chg: Double
    /// Абсолютное изменение за 24ч в валюте цены.
    let change: Double
    let volume: Double
    let turnover: Double
    let quoteCurrencyName: String
    let baseCurrency: String
    let quoteCurrency: String
}

// MARK: - Представление

extension SymbolThumb {
    var isPositive: Bool { chg >= 0 }

    /// «70 324,00»
    var priceFormatted: String { MarketFormatting.price(close) }

    /// «+2.34%»
    var changePercent: String { MarketFormatting.percent(chg, signed: true) }

    /// «2.34%» — без знака, когда знак уже несёт соседнее значение.
    var changePercentPlain: String { MarketFormatting.percent(abs(chg), signed: false) }

    /// «+1 676,00 USDT»
    var changeFormatted: String { "\(MarketFormatting.signedAmount(change)) \(baseSymbol)" }

    /// Символ валюты цены: ₽ вместо RUB и т.п.
    var baseSymbol: String {
        switch baseCurrency {
        case "RUB": "₽"
        case "USD": "$"
        case "EUR": "€"
        default: baseCurrency
        }
    }
}
