#!/usr/bin/env python
# -*- coding: utf-8 -*-

from framework.ui_libs.ui_lib import Page
from tools.utils import now_timestamp
from configs.modify_data import test_modify_data


class VulnerabilityEF(Page):
    """ Класс для работы с ЭФ уязвимости"""

    def vl_ef_click_new_ef_version_btn(self):
        """ метод кликает по кнопке 'Создать новую версию' в ЭФ """
        self.find_and_click(*self.locators.MW_NEW_VULNERABILITY_EF_VERSION_BUTTON)
        self.ba_lku_wait_for_loading()
        self.search_element(*self.locators.MW_EDIT_VULNERABILITY_MODAL)

    def vl_ef_fill_vulnerability_description(self, text):
        """ метод заполняет поле Описание уязвимости и способов ее использования  """
        self.find_and_clear_element(*self.locators.MW_EDIT_VULNERABILITY_MODAL_DESCRIPTION_INPUT)
        self.find_and_fill_element(text, *self.locators.MW_EDIT_VULNERABILITY_MODAL_DESCRIPTION_INPUT)

    def vl_ef_fill_vulnerability_name(self, text):
        """ метод заполняет поле Название  """
        self.find_and_clear_element(*self.locators.MW_EDIT_VULNERABILITY_MODAL_NAME_INPUT)
        self.find_and_fill_element(text, *self.locators.MW_EDIT_VULNERABILITY_MODAL_NAME_INPUT)

    def vl_ef_click_add_to_request_btn(self):
        """ метод кликает кнопку Добавить к запросу  """
        self.find_and_click(*self.locators.MW_EDIT_VULNERABILITY_MODAL_ADD_BTN)
        self.ba_lku_wait_for_loading()

    def vl_ef_edit_fields_and_save_new_version(self):
        """ метод изменяет значения в полях Название и Описание и сохраняет новую версию ЭФ
        ЭФ для редактирования должны быть уже открыта """
        test_modify_data['vulnerability_edit_name'] = 'Уязвимость ред ' + now_timestamp()
        test_modify_data['vulnerability_edit_description'] = 'Описание ред ' + now_timestamp()
        self.vl_ef_fill_vulnerability_name(test_modify_data['vulnerability_edit_name'])
        self.vl_ef_fill_vulnerability_description(test_modify_data['vulnerability_edit_description'])
        self.vl_ef_click_add_to_request_btn()

    def vl_ef_click_technical_details_on_ef(self):
        """ метод кликает ссылку Технические подробности """
        self.find_and_click(*self.locators.MW_VIEW_VULNERABILITY_NAV_BAR_TECHNICAL_DETAILS)
        self.ba_lku_wait_for_loading()

    def vl_ef_check_add_new_version_btn_absent(self):
        """ метод проверяет, что кнопка Создать новую версию отсутствует"""
        try:
            elems = self.search_elements(*self.locators.MW_NEW_VULNERABILITY_EF_VERSION_BUTTON)
            if elems:
                test_modify_data['errors'].append('Кнопка "Создать новую версию" отображается, хотя должна '
                                                  'отсутствовать')
        except:
            self.log.info('Кнопка "Создать новую версию" отсутствует, как ожидалось')

    def vl_ef_close_btn(self):
        """ Нажать на кнопку 'Крестик' (Закрыть) """
        self.find_and_click(*self.locators.MW_VIEW_VULNERABILITY_EF_CLOSE_BTN)

    def vl_ef_click_insert_changes_btn(self):
        """ метод нажимает кнопку Внести изменения """
        self.find_and_click(*self.locators.MW_VIEW_VULNERABILITY_EF_INSERT_CHANGES_BTN)
        self.ba_wait_for_loading()

    def vl_ef_compare_send_data_with_ef_data(self, send_data=None):
        self.vl_ef_compare_ef_and_send_data_common_info(send_data)
        self.vl_ef_click_technical_details_on_ef()
        self.ba_lku_wait_for_loading()
        self.vl_ef_compare_ef_and_send_data_technical_info(send_data)