import sys
import os

# 获取当前脚本的绝对路径
current_dir = os.path.dirname(os.path.abspath(__file__))
# 构建预定系统的绝对路径
预定系统_path = os.path.abspath(os.path.join(current_dir, '..','..','..','..'))
# 添加路径
sys.path.append(预定系统_path)
# 导入模块
from 预定系统.Base.base import *


# 获取当前脚本所在的目录
current_dir = os.path.dirname(os.path.abspath(__file__))

# 构建CSV文件的绝对路径
csv_file_path = os.path.join(current_dir, '../../../测试数据/展厅巡检/会议补充预约.csv')

class Server_monitoring_0001:
    """
        执行指令:
            1.cd 预定系统
            2.hytest --report_title 会议预约测试报告 --report_url_prefix http://192.168.1.225 --test 展厅补充会议创建_001
    """
    tags = ['展厅巡检','服务器状态巡检']
    ddt_cases = read_csv_data(csv_file_path)

    def teststeps(self):
        i = 0
        # 使用示例
        url = "http://192.168.5.200:8081/media/cmdb/service_info/check.txt"
        save_path = "check.txt"
        extract_info = ['[m]ysql', '[r]edis', '[f]dfs_storaged', '[f]dfs_tracker', '[e]mqx',
                        'ubains-meeting-api-1.0-SNAPSHOT.jar', 'ubains-meeting-inner-api-1.0-SNAPSHOT.jar', 'uwsgi']

        info = fetch_and_parse_check_txt(url, save_path, extract_info)
        if info:
            for key, value in info.items():
                STEP(++i, f"服务器{key} 服务状态巡检")
                INFO(f"监测到{key} 服务的状态:{value}")
                CHECK_POINT(f"{key} 服务状态是否正常", value == '服务正常')

        else:
            INFO("无法获取或解析文件内容")

        # 补充预定系统会议创建
            # 初始化通知文本为空字符串
            notify_text = ""
            # 从全局存储中获取webdriver实例
            wd = GSTORE['wd']
            name = self.name
            conference_name, message_name, book_type, check_text = self.para

            # 在会议室列表搜索会议室
            STEP(1, f"在会议室列表搜索:{conference_name}")
            # 展开筛选下拉框
            safe_click((By.XPATH, "//i[@class='el-collapse-item__arrow el-icon-arrow-right']"), wd)
            sleep(1)
            # 输入会议室名称,并点击【查询】按钮
            safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议室名称']"), conference_name, wd)
            safe_click((By.XPATH, "//button[@type='button']//span[contains(text(),'查询')]"), wd)
            sleep(1)

            # 点击【会议预定】按钮,进入会议预定界面
            STEP(2, "点击【会议预定】按钮")
            safe_click((By.XPATH, "//span[@class='MeetingCityList_t_btn']"), wd)
            sleep(1)

            # 在会议预定第一步界面进行数据填入
            STEP(3, "会议第一步数据填写")
            INFO(
                f"输入会议名称:{message_name},选择会议类型:视讯融合会议,选择预约类型:{book_type}")
            # 输入会议名称
            safe_send_keys((By.XPATH, "//input[@placeholder='请输入会议名称']"), message_name, wd)

            # 判断会议类型
            safe_click((By.XPATH,
                        f"//div[@class='reserve_input']//span[@class='el-checkbox__label'][normalize-space()='讯飞语音转录']"),
                       wd)
            sleep(2)

            # 选择普通会议
            safe_click((By.XPATH, f"//span[contains(text(),'{book_type}')]"), wd)
            sleep(1)

            # 选择签到时间
            INFO("选择提前30分钟开始签到")
            safe_click((By.XPATH, "(//span[@class='el-switch__core'])[2]"), wd)
            safe_click((By.XPATH, "(//span[@class='el-switch__core'])[3]"), wd)
            sleep(1)
            safe_send_keys((By.XPATH, "//input[@id='input_checkin']"), "30", wd)

            # 根据开始时间选择8点30
            safe_click((By.XPATH, f"(//div[normalize-space()='08:30'])[1]"), wd)
            safe_click((By.XPATH, f"(//div[normalize-space()='08:45'])[1]"), wd)

            # 在会议预定第二步界面进行数据填入
            STEP(4, "会议第二步数据填写")
            # 点击【下一步】进入会议预定第二步界面
            safe_click((By.XPATH, "//div[contains(text(),'下一步')]"), wd)
            sleep(1)

            # 根据参会人名称搜搜对应参会人
            ipn = ['赵嘉诚', 'CZJ', '马晓丽', '王兵', '陈林', '李立键', '丁海洪', '刘建胜', '潘松林', '卢培锽',
                   '黄史恭', '罗一龙', '彭甘宇']
            for i in range(0, 13):
                safe_send_keys((By.XPATH, "//input[@placeholder='账号/用户名']"), ipn[i], wd)
                send_keyboard((By.XPATH, "//input[@placeholder='账号/用户名']"), wd)
                sleep(1)
                # 选择内部参会人
                safe_click((By.XPATH,
                            "//th[contains(@class,'is-leaf el-table__cell')]//span[contains(@class,'el-checkbox__inner')]"),
                           wd)
                # 获取已选的参会人名称
                # notify_text = elment_get_text((By.XPATH, f"//span[normalize-space()='{ipn[i]}']"), wd)
            INFO(f"已选择参会人:{ipn}")
            SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Server_Monitoring", "选择内部参会人")

            # 点击【下一步】按钮
            safe_click((By.XPATH, "//div[contains(text(),'下一步')]"), wd)
            sleep(1)
            safe_click((By.XPATH, "//div[contains(text(),'下一步')]"), wd)

            # 进入会议预约第三步进行填写
            STEP(5, "会议第三步数据填写")
            # 取消短信提醒
            safe_click((By.XPATH, "//div[@class='Sendout']//span[@class='el-checkbox__label'][contains(text(),'全选')]"), wd)
            sleep(2)
            safe_click((By.XPATH, "//div[@class='Sendout']//span[@class='el-checkbox__label'][contains(text(),'全选')]"), wd)

            # 点击【确定】按钮
            STEP(6, "点击【确定】按钮")
            safe_click((By.XPATH, "//div[contains(text(),'确定')]"), wd)

            # 点击最后【确定】按钮,预定成功后会跳转至已预定界面
            STEP(7, "点击【确定】按钮")
            safe_click((By.XPATH, "//div[contains(@aria-label,'会议信息')]//span[contains(text(),'确定')]"), wd)
            sleep(3)
            SELENIUM_LOG_SCREEN(wd, "75%", "Exhibit_Inspect", "Server_Monitoring", "预定会议成功界面")