"""StockAnalysis.com view functions"""
__docformat__ = "numpy"

import logging
import os
from typing import List

from openbb_terminal.decorators import log_start_end
from openbb_terminal.etf import stockanalysis_model
from openbb_terminal.helper_funcs import export_data, print_rich_table
from openbb_terminal.rich_config import console

logger = logging.getLogger(__name__)


@log_start_end(log=logger)
def view_overview(symbol: str, export: str = ""):
    """Print etf overview information

    Parameters
    ----------
    symbol:str
        ETF symbols to display overview for
    export:str
        Format to export data
    """

    if symbol.upper() not in stockanalysis_model.get_all_names_symbols()[0]:
        console.print(f"{symbol.upper()} not found in ETFs\n")
        return

    data = stockanalysis_model.get_etf_overview(symbol)

    print_rich_table(
        data,
        headers=list(data.columns),
        title="ETF Overview Information",
        show_index=True,
    )

    export_data(export, os.path.dirname(os.path.abspath(__file__)), "overview", data)


@log_start_end(log=logger)
def view_holdings(symbol: str, limit: int = 10, export: str = ""):
    """

    Parameters
    ----------
    symbol: str
        ETF symbol to show holdings for
    limit: int
        Number of holdings to show
    export: str
        Format to export data
    """

    data = stockanalysis_model.get_etf_holdings(symbol)
    print_rich_table(
        data[:limit],
        headers=list(data.columns),
        title="ETF Holdings",
        show_index=True,
    )

    export_data(export, os.path.dirname(os.path.abspath(__file__)), "holdings", data)


@log_start_end(log=logger)
def view_comparisons(symbols: List[str], export: str = ""):
    """Show ETF comparisons

    Parameters
    ----------
    symbols: List[str]
        List of ETF symbols
    export: str
        Format to export data
    """

    etf_list = stockanalysis_model.get_all_names_symbols()[0]
    for etf in symbols:
        if etf not in etf_list:
            console.print(f"{etf} not a known symbol.\n")
            symbols.remove(etf)

    data = stockanalysis_model.compare_etfs(symbols)
    if data.empty:
        console.print("No data found for given ETFs\n")
        return
    print_rich_table(
        data, headers=list(data.columns), title="ETF Comparisons", show_index=True
    )

    export_data(export, os.path.dirname(os.path.abspath(__file__)), "overview", data)


@log_start_end(log=logger)
def display_etf_by_name(name: str, limit: int = 10, export: str = ""):
    """Display ETFs matching search string. [Source: StockAnalysis]

    Parameters
    ----------
    name: str
        String being matched
    limit: int
        Limit of ETFs to display
    export: str
        Export to given file type

    """
    matching_etfs = stockanalysis_model.get_etfs_by_name(name)

    print_rich_table(
        matching_etfs.head(limit),
        show_index=False,
        title="ETF Search Result",
    )

    export_data(
        export,
        os.path.dirname(os.path.abspath(__file__)),
        "ln_sa",
        matching_etfs,
    )
