# -*- coding: utf-8 -*-
from selenium import selenium
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait, Select
from selenium.webdriver.support import expected_conditions as EC
from common_functions_60 import *

import random, time
import string

def add_user_profile(driver,user_name,profile,group,tags=[]):
        click_menu_element(driver,"Manage users")
        driver.find_element_by_css_selector("b").click()
        driver.find_element_by_id("text-filter_search").clear()
        driver.find_element_by_id("text-filter_search").send_keys(user_name)
        driver.find_element_by_id("submit-search").click()
        driver.find_element_by_xpath('//*[@id="table3-0-6"]/a[2]').click()
        Select(driver.find_element_by_id("assign_profile")).select_by_visible_text(profile)


        if group == "All":
                Select(driver.find_element_by_id("assign_group")).select_by_visible_text(group)
        else:
                #TODO This will not work when choosing a group within a group within another group
                Select(driver.find_element_by_id("assign_group")).select_by_visible_text("    "+group)

	for tag in tags:
		Select(driver.find_element_by_id("assign_tags")).select_by_visible_text(tag)
		
	#If we do not provide tags, we NEED to leave "Any" selected, otherwise we need to deselect it.
	if tags != []:
		Select(driver.find_element_by_id("assign_tags")).deselect_by_visible_text("Any")
		
        driver.find_element_by_xpath('//*[@name="add"]').click()

		
		
def create_user(driver,user_name,userpwd,email=None,profile_list=None,is_admin=False):

        u"""
        Profile list es una LISTA de TUPLAS:
                                l = [("Chief Operator","All",[]),("Read Operator","Servers",["tag1","tag2"])]
        """

        click_menu_element(driver,"Manage users")
        driver.find_element_by_id("submit-crt").click()
        driver.find_element_by_name("id_user").clear()
        driver.find_element_by_name("id_user").send_keys(user_name)
        driver.find_element_by_name("password_new").clear()
        driver.find_element_by_name("password_new").send_keys(userpwd)
        driver.find_element_by_name("password_confirm").clear()
        driver.find_element_by_name("password_confirm").send_keys(userpwd)
        driver.find_element_by_name("email").clear()

        if is_admin == True:
                driver.find_element_by_id('radiobtn0001').click()

        if is_admin == False:
                driver.find_element_by_id('radiobtn0002').click()

        if email != None:
                driver.find_element_by_name("email").clear()
                driver.find_element_by_name("email").send_keys(email)
        driver.find_element_by_id("submit-crtbutton").click()

        if profile_list != None:
                for profile_name,group_name,tag_list in profile_list:
                        add_user_profile(driver,user_name,profile_name,group_name,tags=tag_list)


def search_user(driver,user_name):
	click_menu_element(driver,"Manage users")
	driver.find_element_by_css_selector("b").click()
	driver.find_element_by_id('text-filter_search').clear()
	driver.find_element_by_id("text-filter_search").send_keys(user_name)
	driver.find_element_by_id("submit-search").click()

		
def activate_home_screen(driver,mode):

	click_menu_element(driver,"Edit my user")
	Select(driver.find_element_by_id("section")).select_by_visible_text(mode)
	driver.find_element_by_id("submit-uptbutton").click()


def create_user_profile(driver,profile_name,bit_list=[]):

	#bit_list can be the profile name or bit.	
	
	click_menu_element(driver,"Profile management")
	driver.find_element_by_id("submit-crt").click()

	driver.find_element_by_id("text-name").send_keys(profile_name)
	
	for profile in bit_list:
		
		if profile == "View incidents" or profile == "IR":
			
			driver.find_element_by_xpath('//*[@id="checkbox-incident_view"]').click()
			
		if profile == "Edit incidents" or profile == "IW":
			
			driver.find_element_by_xpath('//*[@id="checkbox-incident_edit"]').click()
			
		if profile == "Manage incidents" or profile == "IM":

			driver.find_element_by_xpath('//*[@id="checkbox-incident_management"]').click()
			
		if profile == "View agents" or profile == "AR":
		
			driver.find_element_by_xpath('//*[@id="checkbox-agent_view"]').click()

		if profile == "Edit agents" or profile == "AW":
		
			driver.find_element_by_xpath('//*[@id="checkbox-agent_edit"]').click()

		if profile == "Disable agents" or profile == "AD":
		
			driver.find_element_by_xpath('//*[@id="checkbox-agent_disable"]').click()

		if profile == "Edit alerts" or profile == "LW":
		
			driver.find_element_by_xpath('//*[@id="checkbox-alert_edit"]').click()

		if profile == "Manage alerts" or profile == "LM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-alert_management"]').click()

		if profile == "Manage users" or profile == "UM":
			
			driver.find_element_by_xpath('//*[@id="checkbox-user_management"]').click()

		if profile == "Manage database" or profile == "DM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-db_management"]').click()
	
		if profile == "View events" or profile == "ER":
		
			driver.find_element_by_xpath('//*[@id="checkbox-event_view"]').click()

		if profile == "Edit events" or profile == "EW":
		
			driver.find_element_by_xpath('//*[@id="checkbox-event_edit"]').click()		

		if profile == "Manage events" or profile == "EM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-event_management"]').click()		

		if profile == "View reports" or profile == "RR":
		
			driver.find_element_by_xpath('//*[@id="checkbox-report_view"]').click()		

		if profile == "Edit reports" or profile == "RW":
		
			driver.find_element_by_xpath('//*[@id="checkbox-report_edit"]').click()		
		
		if profile == "Manage reports" or profile == "RM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-report_management"]').click()		

		if profile == "View network maps" or profile == "MR":
			
			driver.find_element_by_xpath('//*[@id="checkbox-map_view"]').click()		
			
		if profile == "Edit network maps" or profile == "MW":
			
			driver.find_element_by_xpath('//*[@id="checkbox-map_edit"]').click()		

		if profile == "Manage network maps" or profile == "MM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-map_management"]').click()		
			
		if profile == "View visual console" or profile == "VR":
		
			driver.find_element_by_xpath('//*[@id="checkbox-vconsole_view"]').click()		
			
		if profile == "Edit visual console" or profile == "VW":
		
			driver.find_element_by_xpath('//*[@id="checkbox-vconsole_edit"]').click()		
			
		if profile == "Manage visual console" or profile == "VM":
		
			driver.find_element_by_xpath('//*[@id="checkbox-vconsole_management"]').click()		
			
		if profile == "Pandora management" or profile == "PM":
			
			driver.find_element_by_xpath('//*[@id="checkbox-pandora_management"]').click()		
			
	driver.find_element_by_id("submit-crt").click()

def delete_user(driver,user_name):
	search_user(driver,user_name)	
	driver.find_element_by_xpath('//*[@id="table3-0-6"]/a[3]/img').click()
	alert = driver.switch_to_alert() 
	alert.accept()