"""Hyperliquid exchange subclass"""

import logging
from typing import Dict

from ccxt import SIGNIFICANT_DIGITS

from freqtrade.enums import TradingMode
from freqtrade.exchange import Exchange
from freqtrade.exchange.exchange_types import FtHas


logger = logging.getLogger(__name__)


class Hyperliquid(Exchange):
    """Hyperliquid exchange class.
    Contains adjustments needed for Freqtrade to work with this exchange.
    """

    _ft_has: FtHas = {
        # Only the most recent 5000 candles are available according to the
        # exchange's API documentation.
        "ohlcv_has_history": False,
        "ohlcv_candle_limit": 5000,
        "trades_has_history": False,  # Trades endpoint doesn't seem available.
        "exchange_has_overrides": {"fetchTrades": False},
    }

    @property
    def _ccxt_config(self) -> Dict:
        # Parameters to add directly to ccxt sync/async initialization.
        # ccxt defaults to swap mode.
        config = {}
        if self.trading_mode == TradingMode.SPOT:
            config.update({"options": {"defaultType": "spot"}})
        config.update(super()._ccxt_config)
        return config

    @property
    def precision_mode_price(self) -> int:
        """
        Override the default precision mode for price.
        """
        return SIGNIFICANT_DIGITS
