"""Alternative Data Controller Module"""
__docformat__ = "numpy"

import logging
from typing import List

from openbb_terminal.custom_prompt_toolkit import NestedCompleter

from openbb_terminal import feature_flags as obbff
from openbb_terminal.decorators import log_start_end
from openbb_terminal.menu import session
from openbb_terminal.parent_classes import BaseController
from openbb_terminal.rich_config import console, MenuText

logger = logging.getLogger(__name__)
# pylint:disable=import-outside-toplevel


class AlternativeDataController(BaseController):
    """Alternative Controller class"""

    CHOICES_COMMANDS: List[str] = []
    CHOICES_MENUS = ["covid", "oss"]
    PATH = "/alternative/"
    CHOICES_GENERATION = True

    def __init__(self, queue: List[str] = None):
        """Constructor"""
        super().__init__(queue)

        if session and obbff.USE_PROMPT_TOOLKIT:
            choices: dict = self.choices_default

            self.completer = NestedCompleter.from_nested_dict(choices)

    def print_help(self):
        """Print help"""
        mt = MenuText("alternative/")
        mt.add_menu("covid")
        mt.add_menu("oss")
        console.print(text=mt.menu_text, menu="Alternative")

    @log_start_end(log=logger)
    def call_covid(self, _):
        """Process covid command"""
        from openbb_terminal.alternative.covid.covid_controller import CovidController

        self.queue = self.load_class(CovidController, self.queue)

    @log_start_end(log=logger)
    def call_oss(self, _):
        """Process oss command"""
        from openbb_terminal.alternative.oss.oss_controller import OSSController

        self.queue = self.load_class(OSSController, self.queue)
