def load_proxies(item):
    if item["type"] == "plain":
        return [item["data"]]
    if item["type"] == "url":
        data = requests.get(item["url"])
        data_yaml: dict = safe_load_yaml(data.content.decode())
    else:
        with open(item["path"], "r") as f:
            data_yaml: dict = safe_load_yaml(f)
    proxy_yaml = load_clash_proxies(data_yaml)
    for p in proxy_yaml:
        if "udp" in item and "udp" not in p:
            p["udp"] = item["udp"]
        if "prefix" in item:
            p["name"] = item["prefix"] + p["name"]
        if "suffix" in item:
            p["name"] += item["suffix"]
        if p["type"] == "ss":
            if "plugin" in item and "plugin" not in p:
                p["plugin"] = item["plugin"]
                if "plugin-opts" in item:
                    p["plugin-opts"] = item["plugin-opts"]
    return proxy_yaml
def load_clash_url_rule_set(
    url: str, targetMap: dict, skipRule: set, skipTarget: set
) -> list:
    data = safe_load_yaml(requests.get(url).content)
    result: list = []

    for rule in data["Rule"]:
        original_target = str(rule).split(",")[-1]
        map_to: str = targetMap.get(original_target)
        if (
            str(rule).split(",")[0] not in skipRule
            and original_target not in skipTarget
        ):
            if not map_to is None:
                result.append(str(rule).replace(original_target, map_to))
            else:
                result.append(str(rule))

    return result
def load_clash_file_rule_set(
    path: str, targetMap: dict, skipRule: set, skipTarget: set
) -> list:
    with open(path, "r") as f:
        data = safe_load_yaml(f)
    result: list = []

    for rule in data["Rule"]:
        original_target = str(rule).split(",")[-1]
        map_to: str = targetMap.get(original_target)
        if (
            str(rule).split(",")[0] not in skipRule
            and original_target not in skipTarget
        ):
            if not map_to is None:
                result.append(str(rule).replace(original_target, map_to))
            else:
                result.append(rule)

    return result
def load_clash_file_rule_set(path: str) -> list:
    with open(path, "r") as f:
        data = safe_load_yaml(f)
    return load_clash_rules(data)
def load_clash_url_rule_set(url: str) -> list:
    data = safe_load_yaml(requests.get(url).content)
    return load_clash_rules(data)