from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

from pages.desktop.base import Base


class LanguageTools(Base):
    URL_TEMPLATE = "/language-tools/"

    _language_tools_header_locator = (By.CLASS_NAME, "Card-header-text")
    _langpacks_info_text_locator = (By.CSS_SELECTOR, ".Card-contents p:nth-child(2)")
    _dictionaries_info_text_locator = (By.CSS_SELECTOR, ".Card-contents p:nth-child(1)")
    _language_list_column_locator = (By.CSS_SELECTOR, ".pivoted:nth-child(1) strong")
    _langpacks_list_column_locator = (By.CSS_SELECTOR, ".pivoted:nth-child(2) a")
    _dictionaries_list_column_locator = (By.CSS_SELECTOR, ".pivoted:nth-child(3) a")

    def loaded(self):
        """Waits for various page components to be loaded"""
        self.wait.until(
            EC.invisibility_of_element_located((By.CLASS_NAME, "LoadingText"))
        )
        return self

    @property
    def language_tools_header(self):
        self.wait.until(
            EC.visibility_of_element_located(self._language_tools_header_locator)
        )
        return self.find_element(*self._language_tools_header_locator).text

    @property
    def language_packs_info_text(self):
        self.wait.until(
            EC.visibility_of_element_located(self._langpacks_info_text_locator)
        )
        return self.find_element(*self._langpacks_info_text_locator).text

    @property
    def dictionaries_info_text(self):
        self.wait.until(
            EC.visibility_of_element_located(self._dictionaries_info_text_locator)
        )
        return self.find_element(*self._dictionaries_info_text_locator).text

    @property
    def supported_languages_list(self):
        self.wait.until(
            EC.visibility_of_element_located(self._language_list_column_locator)
        )
        return self.find_elements(*self._language_list_column_locator)

    @property
    def available_language_packs(self):
        self.wait.until(
            EC.visibility_of_element_located(self._langpacks_list_column_locator)
        )
        return self.find_elements(*self._langpacks_list_column_locator)

    @property
    def available_dictionaries(self):
        self.wait.until(
            EC.visibility_of_element_located(self._dictionaries_list_column_locator)
        )
        return self.find_elements(*self._dictionaries_list_column_locator)
