import os
import platform

from selenium import webdriver
# ---------------   selenium 依赖 start ----------------
from selenium.webdriver.chrome.service import Service as ChromeService
from selenium.webdriver.chromium.service import ChromiumService
from selenium.webdriver.firefox.service import Service as FirefoxService
from selenium.webdriver.edge.service import Service as EdgeService
from selenium.webdriver.ie.service import Service as IeService
from selenium.webdriver.safari.service import Service as SafariService

from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
# ---------------   selenium 依赖 end ----------------

# ---------------  webdriver_manager 依赖 start  -----------------
from webdriver_manager.chrome import ChromeDriverManager
from webdriver_manager.firefox import GeckoDriverManager
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from webdriver_manager.opera import OperaDriverManager
# ---------------  webdriver_manager 依赖 end  -----------------

from utils.index import get_screen_resolution

# from mozprofile import FirefoxProfile
'''
创建浏览器实例
'''


def create(option=None, using_user_data=True, web_browser="firefox"):
    """

    :param web_browser:
    :param using_user_data:
    :param option:
    :return:
    """

    # 安装或升级 chromedriver
    # chromedriver_autoinstaller.install()

    options = ""
    browser = ""
    # 获取现有Chrome浏览器用户数据目录
    user_data_dir = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'user_data')
    if web_browser == "firefox":
        options = webdriver.FirefoxOptions()
    elif web_browser == "chrome" or web_browser == "chrome_test":
        options = webdriver.ChromeOptions()
    elif web_browser == "edge":
        options = webdriver.EdgeOptions()
    elif web_browser == "chromium":
        options = webdriver.ChromeOptions()
    if option is not None:
        for value in option:
            options.add_argument(value)

    if using_user_data:
        # 添加用户数据目录参数,启用浏览器的持久性会话,可以保存登录状态和Cookie
        if web_browser == "firefox":
            # 将此处替换为你的Firefox用户数据目录路径
            # profile = FirefoxProfile(profile_directory=user_data_dir)
            # options.profile = profile
            options.add_argument("-profile")
            options.add_argument(user_data_dir)
            # options.add_argument(f'--user-data-dir={user_data_dir}')
        elif web_browser == "chrome":
            options.add_argument(f'--user-data-dir={user_data_dir}')
        elif web_browser == "chromium":
            options.add_argument(f'--user-data-dir={user_data_dir}')
        elif web_browser == "chrome_test":
            options.add_argument(f'--user-data-dir={user_data_dir}')
        elif web_browser == "edge":
            options.add_argument(f'--user-data-dir={user_data_dir}')
        else:
            print("")

    # if sys.platform.startswith('linux'):
    # print("当前系统是 Linux")
    # linux下运行记得加上这些参数 ----------------------------
    # chrome_options.add_argument('--headless')
    # options.add_argument("--window-size=1920x1080")  # 设置窗口大小,这是一个常见的完全无头模式的设置
    # options.add_argument("--start-maximized")  # 最大化窗口
    options.add_argument('--no-sandbox')
    options.add_argument('--disable-gpu')
    options.add_argument('--disable-dev-shm-usage')
    # 加载chromedriver -------------------------------------------------
    # windows 下的 chromedriver 默认加载路径是当前路径下的 chromedriver.exe
    # linux 下的 chromedriver 默认加载路径是 /usr/local/bin/chromedriver
    # 当然也可以通过 executable_path 自定义
    if web_browser == "firefox":
        # 创建Firefox浏览器对象并传入选
        browser = webdriver.Firefox(options=options, service=FirefoxService(GeckoDriverManager().install()))
    elif web_browser == "chrome":
        # 创建Chrome浏览器对象并传入选项
        web_browser = webdriver.Chrome(options=options, service=ChromeService(ChromeDriverManager().install()))
    elif web_browser == "chromium":
        binary_location = ""
        webdriver_location = ""
        if platform.system() == "Windows":
            binary_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser', "chrome_win64",
                                           "chrome.exe")
            webdriver_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser', "web-driver",
                                              "chromedriver_win32",
                                              "chromedriver.exe")
        elif platform.system() == "Linux":
            binary_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser',
                                           "chrome-linux64", "chrome")
            webdriver_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser', "web-driver",
                                              "chromedriver_linux64",
                                              "chromedriver")
        elif platform.system() == "Darwin":
            binary_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser',
                                           "chrome-mac-x64", "chrome.app")
            webdriver_location = os.path.join(os.path.abspath("../"), 'network-assets-reptile', 'browser', "web-driver",
                                              "chromedriver_mac64",
                                              "chromedriver")
        else:
            print("")
        # 指定浏览器路径
        # print(binary_location)
        # 指定浏览器路径
        # options.binary_location = binary_location
        # options.browser_version = "114"
        # 设置驱动二进制可执行文件路径
        # service = ChromeService(executable_path=webdriver_location)
        service = ChromeService(executable_path=webdriver_location)
        # service=service=ChromeService(ChromeDriverManager().install())
        browser = webdriver.Chrome(options=options, service=service)
    elif web_browser == "edge":
        browser = webdriver.Edge(options=options, service=EdgeService(EdgeChromiumDriverManager().install()))
    else:
        print("")

    if option is None:
        # 获取屏幕分辨率
        width, height = get_screen_resolution()
        # 设置窗口大小为全屏
        browser.set_window_size(width, height)

    return browser