import os.path

import opencc
from pytube import YouTube
import ssl
import subprocess
from utils.Logger import log
from datetime import datetime, timedelta
from dateutil.relativedelta import relativedelta

ssl._create_default_https_context = ssl._create_stdlib_context


def convert_string_to_time(string):
    """

    :param string:
    :return:
    """
    current_time = datetime.now()

    if "天前" in string:
        days = int(string.split("天前")[0])
        converted_time = current_time - relativedelta(days=days)
    elif "周前" in string:
        weeks = int(string.split("周前")[0])
        converted_time = current_time - relativedelta(weeks=weeks)
    elif "月前" in string:
        months = int(string.split("月前")[0])
        converted_time = current_time - relativedelta(months=months)
    elif "年前" in string:
        years = int(string.split("年前")[0])
        converted_time = current_time - relativedelta(years=years)
    else:
        raise ValueError("Invalid string format")

    timestamp = converted_time.timestamp()
    return timestamp

def convert_to_traditional(simplified_text):
    """
    将简体中文文本转换为繁体中文文本。

    Args:
        simplified_text (str): 要转换的简体中文文本。

    Returns:
        str: 转换后的繁体中文文本。
    """
    converter = opencc.OpenCC('s2t.json')  # 创建简体中文到繁体中文的转换器
    traditional_text = converter.convert(simplified_text)  # 进行转换
    return traditional_text


def pytube_download(link, file_dir):
    """
    下载指定链接的 YouTube 视频并保存到指定目录。

    参数:
    - link: 字符串,YouTube 视频的链接。
    - file_dir: 字符串,视频保存的目录路径。

    返回值:
    - 如果下载成功,则返回 True。
    - 如果下载失败,则返回 False。
    """
    yt = YouTube(link)  # 创建 YouTube 对象
    # yt.register_on_complete_callback(callback)
    yt.streams.filter(progressive=True, file_extension='mp4')  # 过滤指定条件的视频流
    steam = yt.streams.get_by_itag(22)  # 获取指定标签的视频流
    try:
        steam.download(file_dir)  # 下载视频并保存到指定目录
        return True
    except:
        print("下载失败")  # 捕获下载异常并输出错误信息
        return False


def yt_dlp_download(url, name):
    file_dir = os.path.abspath("../")
    options = f'-v'
    network_options = f'-o "{os.path.join(file_dir, "network-assets-reptile", "reptile_data", name, "%(id)s.%(ext)s")}"'
    geo = ""
    # --get-url
    video_selection = f''
    download_options = ""
    other_options = f'--verbose'
    # 要执行的 shell 命令
    command = f'yt-dlp {options} {network_options} {geo} {video_selection} {download_options} {other_options} -- {url}'

    # 使用 subprocess 调用 shell 命令
    result = subprocess.run(command, shell=True, capture_output=True, text=True)

    # 检查命令执行结果
    if result.returncode == 0:
        # 命令成功执行,输出结果
        # log.debug(str(result.stdout))
        return True
    else:
        # 命令执行失败,输出错误信息
        # log.debug(str(result.stderr))
        return False