import time
import random
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support.wait import WebDriverWait
import logging


class IdeaAction:
    def __init__(self, driver, task):
        self.driver = driver
        self.task = task

    def send_page(self):
        WebDriverWait(self.driver, 10).until(
            lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
        page_input = self.driver.find_element_by_class_name('webuploader-element-invisible')
        page_input.send_keys(self.task['idea']['page_path'])
        try:
            WebDriverWait(self.driver, 100).until(lambda driver: driver.find_element_by_xpath(
                '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div[2]/section/div/div[2]/button[1]'))
            self.driver.find_element_by_xpath(
                '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/div/form/div[2]/div/div[1]/div/div[1]/div/div/div/div/div/div[2]/section/div/div[2]/button[1]').click()
            WebDriverWait(self.driver, 100).until(
                lambda driver: self.driver.find_element_by_xpath('//*[@id="test_progress_confirm"]'))

            suc_button = self.driver.find_element_by_xpath('//*[@id="test_progress_confirm"]')
            WebDriverWait(self.driver, 100).until(lambda driver: suc_button.is_displayed() and suc_button.is_enabled())
            suc_button.click()
        except:
            pass

    def push_promotion_page(self):
        # TODO:对于朋友圈需要整体新建一个-----问题挺多
        idea_dic = self.task['idea']
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        # 点击跳转
        for _ in select_elements:
            if _.text == '公众号详情页' and idea_dic['jump_type'] == '2':
                _.click()
        time.sleep(random.uniform(0.1, 0.2))

        # 按钮文案
        for _ in select_elements:
            if _.text == '立即咨询' and idea_dic['button_type'] == '2':
                _.click()
            if _.text == '立即申请' and idea_dic['button_type'] == '3':
                _.click()
            if _.text == '阅读小说' and idea_dic['button_type'] == '4':
                _.click()
        time.sleep(random.uniform(0.1, 0.2))

        if idea_dic['jump_type'] == '1':
            # 点击按钮跳转
            for _ in select_elements:
                if _.text == '一键关注' and idea_dic['jump_type_button_type'] == '2':
                    _.click()
            time.sleep(random.uniform(0.1, 0.2))

            # 原生推广页选择
            self.driver.find_element_by_xpath('//*[@id="choose_template"]').click()
            select_elements = self.driver.find_elements_by_xpath('//*[@class="inputWrapper-3fBModc9zM"]')
            input_elements = self.driver.find_element_by_xpath('//*[@class="adui-input-base"]')
            for _ in input_elements:
                if _.get_attribute("placeholder") == '输入关键字搜索推广页':
                    _.send_keys(idea_dic['jump_type_page_type']['layout_name'])
                    _.send_keys(Keys.RETURN)
            WebDriverWait(self.driver, 30).until(
                lambda driver: self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]'))

            page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
            for _ in page_elements:
                # 推广页的名字需要一模一样
                if _.text == idea_dic['jump_type_page_type']['layout_name']:
                    _.click()
            time.sleep(random.uniform(0.1, 0.2))

            self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()
            '//*[@id="test_creative_next_step"]'
            '//*[@id="select_canvas_ok_btn"]'
            time.sleep(random.uniform(0.1, 0.2))

    def idea_pic_gzh_botoom(self):
        # 上传图片
        self.send_page()
        time.sleep(random.uniform(1, 2))

        # 信息栏类型
        idea_dic = self.task['idea']
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
        # 信息栏
        if idea_dic['info_type'] == '1':
            # 头像
            for _ in select_elements:
                if _.text == '头像昵称型':
                    _.click()
        if idea_dic['info_type'] == '2':
            # 文案
            for _ in select_elements:
                if _.text == '文案型':
                    _.click()
            for _ in input_elements:
                # 信息栏文案
                if _.get_attribute("placeholder") == '信息栏文案':
                    _.send_keys(idea_dic['info_type-content'])
        time.sleep(random.uniform(0.1, 0.2))
        self.push_promotion_page()

    def idea_banner_pic_gzh_botoom(self):
        WebDriverWait(self.driver, 10).until(
            lambda driver: self.driver.find_element_by_class_name('webuploader-element-invisible'))
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        # 创意样式
        for _ in select_elements:
            if _.text == '图片式卡片':
                _.click()
                break

        # 上传图片
        self.send_page()
        time.sleep(random.uniform(0.5, 0.7))

        # 标签设置
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        for _ in select_elements:
            if _.text == '转换目标量标签' and self.task['idea']['lable_type'] == 2:
                _.click()
        # 素材设置
        time.sleep(random.uniform(0.1, 0.2))
        self.push_promotion_page()

    def idea_banner_business_gzh_bottom(self):
        WebDriverWait(self.driver, 10).until(
            lambda driver: self.driver.find_element_by_xpath('//*[@id="test_material_type_135"]/span[2]'))
        self.driver.find_element_by_css_selector('#test_material_type_135 > span.inputWrapper-3fBModc9zM > i').click()
        wen_input = self.driver.find_element_by_class_name('input-3MbKvywHL2')
        wen_input.send_keys(self.task['idea']['idea_content'])
        time.sleep(random.uniform(0.2, 0.5))
        self.push_promotion_page()

    def idea_gzh_bottom(self):
        if self.task['idea']['idea_type'] == '1':
            self.idea_pic_gzh_botoom()
        if self.task['idea']['idea_type'] == '2':
            self.idea_banner_pic_gzh_botoom()
        if self.task['idea']['idea_type'] == '3':
            self.idea_banner_business_gzh_bottom()

    def idea_movie_gzh_movie(self):
        WebDriverWait(self.driver, 10).until(
            lambda driver: driver.find_element_by_class_name('webuploader-element-invisible'))

        self.driver.find_element_by_class_name('webuploader-element-invisible').send_keys(
            self.task['idea']['movie_path'])
        suc_button = self.driver.find_element_by_id('test_progress_confirm')
        WebDriverWait(self.driver, 1000).until(lambda x: (suc_button.is_displayed() and suc_button.is_enabled()))

        self.driver.find_element_by_id('test_progress_confirm').click()
        time.sleep(random.uniform(0.4, 0.6))
        self.push_promotion_page()
        time.sleep(random.uniform(0.4, 0.6))

        text_input = self.driver.find_element_by_css_selector('#reward_video_desc > div > input')
        text_input.send_keys(self.task['idea']['content'])

        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        for _ in select_elements:
            if _.text == '转化目标量标签' and self.task['idea']['lable_type'] == 2:
                _.click()

    def idea_big_pic(self):
        # 设置图片
        self.send_page()
        idea_dic = self.task['idea']
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        input_elements = self.driver.find_elements_by_xpath('//*[@class="input-3MbKvywHL2"]')
        # 信息栏
        if idea_dic['info_type'] == '1':
            # 头像
            for _ in select_elements:
                if _.text == '头像昵称型':
                    _.click()
        if idea_dic['info_type'] == '2':
            # 文案
            for _ in select_elements:
                if _.text == '文案型':
                    _.click()
            for _ in input_elements:
                # 信息栏文案
                if _.get_attribute("placeholder") == '信息栏文案':
                    _.send_keys(idea_dic['info_type-content'])
        time.sleep(random.uniform(0.1, 0.2))

        # 图文标题
        self.driver.find_element_by_xpath('//*[@id="test_first_line_input"]/div/input').send_keys(idea_dic['title'])
        time.sleep(random.uniform(0.1, 0.2))

        # 广告文案
        for _ in input_elements:
            if _.get_attribute("placeholder") == '请输入首行文案':
                _.send_keys(idea_dic['content_one'])
                time.sleep(random.uniform(0.1, 0.2))

            if _.get_attribute("placeholder") == '请输入次行文案':
                _.send_keys(idea_dic['content_two'])
                time.sleep(random.uniform(0.1, 0.2))

            if _.get_attribute("placeholder") == '请输入第三行文案(选填)':
                _.send_keys(idea_dic['content_three'])
                time.sleep(random.uniform(0.1, 0.2))

        # 标签展示
        for _ in select_elements:
            if _.text == '不启用' and idea_dic['lable_type'] == '1':
                _.click()
            if _.text == '好友关注量标签' and idea_dic['lable_type'] == '2':
                _.click()
            if _.text == '转化目标量标签' and idea_dic['lable_type'] == '3':
                _.click()
        time.sleep(random.uniform(0.1, 0.2))

        self.push_promotion_page()

    def idea_pyq(self):
        # TODO:添加idea_moudle,
        logging.info('朋友圈--文案设置')
        WebDriverWait(self.driver, 10).until(
            lambda driver: self.driver.find_element_by_xpath('//*[@class="ql-editor ql-blank"]'))
        self.driver.find_element_by_xpath(
            '//*[@class="ql-editor ql-blank"]'
        ).send_keys(self.task['idea']['content'])

        time.sleep(random.uniform(0.1, 0.5))

        # 朋友圈标题设置

        for i in range(40):
            self.driver.find_element_by_xpath('//*[@class="input-2lFnByGCRh"]').send_keys(Keys.BACKSPACE)
        self.driver.find_element_by_xpath('//*[@class="input-2lFnByGCRh"]').send_keys(
            self.task['idea']['name'])

        # 朋友圈其他设置
        select_elements = self.driver.find_elements_by_xpath('//*[@class="label-2ZOAbuO31o"]')
        for _ in select_elements:
            if _.text == '了解更多' and self.task['idea']['jump_type_text_type'] == 2:
                _.click()
            if _.text == '原生推广页' and self.task['idea']['jump_type_link_type'] == 2:
                _.click()

        # 朋友圈推广页选择
        logging.info('朋友圈--推广页设置')
        self.driver.find_element_by_xpath('//*[@id="choose_template"]').click()

        input_elements = self.driver.find_elements_by_xpath('//*[@class="adui-input-base"]')
        for _ in input_elements:
            if _.get_attribute("placeholder") == '输入关键字搜索推广页':
                _.send_keys(self.task['idea']['jump_type_page_type']['layout_name'])
                _.send_keys(Keys.RETURN)
        WebDriverWait(self.driver, 30).until(
            lambda driver: len(self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]'))==5)
        #搜索速度比较慢没有这么快
        time.sleep(1)
        WebDriverWait(self.driver, 30).until(
            lambda driver: [_ for _ in self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]') if
                            _.is_displayed() and _.is_enabled() and _.text == self.task['idea']['jump_type_page_type'][
                                'layout_name']])
        time.sleep(random.uniform(0.5, 1))
        page_elements = self.driver.find_elements_by_xpath('//*[@class="adui-table-cellInner"]')
        for _ in page_elements:
            # 推广页的名字需要一模一样
            if _.text == self.task['idea']['jump_type_page_type']['layout_name']:
                _.click()
        time.sleep(random.uniform(0.1, 0.2))

        self.driver.find_element_by_xpath('//*[@id="select_canvas_ok_btn"]/span').click()

        time.sleep(random.uniform(0.1, 0.5))
        if self.task['idea']['data_show'] == '2':
            self.driver.find_element_by_xpath(
                '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[1]/div/span/span[1]').click()
            if self.task['idea']['data_show-type'] == '2':
                time.sleep(random.uniform(0.1, 0.5))
                WebDriverWait(self.driver, 100).until(lambda driver: self.driver.find_element_by_xpath(
                    '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div[1]/label/span[1]'))
                self.driver.find_element_by_xpath(
                    '//*[@id="wxadcontainer"]/div[1]/div/div[2]/main/div/div[2]/div[2]/div/div[1]/div[1]/div[2]/form/div[5]/div[2]/div/div[1]/label/span[1]').click()