"""Coinbase model"""
__docformat__ = "numpy"

import logging
import pandas as pd
from openbb_terminal.cryptocurrency.coinbase_helpers import make_coinbase_request
from openbb_terminal.decorators import log_start_end

logger = logging.getLogger(__name__)

PAIRS_FILTERS = [
    "id",
    "display_name",
    "base_currency",
    "quote_currency",
    "base_min_size",
    "base_max_size",
    "min_market_funds",
    "max_market_funds",
]


@log_start_end(log=logger)
def get_trading_pairs(
    limit: int = 50, sortby: str = "quote_increment", ascend: bool = True
) -> pd.DataFrame:
    """Get a list of available currency pairs for trading. [Source: Coinbase]

    base_min_size - min order size
    base_max_size - max order size
    min_market_funds -  min funds allowed in a market order.
    max_market_funds - max funds allowed in a market order.

    Parameters
    ----------
    limit: int
        Top n of pairs
    sortby: str
        Key to sortby data
    ascend: bool
        Sort descending flag

    Returns
    -------
    pd.DataFrame
        Available trading pairs on Coinbase
    """

    columns = [
        "id",
        "display_name",
        "base_currency",
        "quote_currency",
        "quote_increment",
        "base_increment",
        "min_market_funds",
    ]
    pairs = make_coinbase_request("/products")
    df = pd.DataFrame(pairs)[columns]
    df = df.sort_values(by=sortby, ascending=ascend).head(limit)
    return df
