package io.wdd.func.xray.service;

import io.wdd.func.xray.beans.node.ProxyNode;
import io.wdd.func.xray.beans.node.XrayConfigInfo;
import io.wdd.func.xray.beans.xray.share.VmessShare;

import java.util.HashMap;
import java.util.List;

public interface XrayCoreService {


    /**
     * 解析代理链字符串，返回完整的代理列表
     *
     * @param proxyChainList 代理链字符串
     * @param isTopicName
     * @return
     */
    List<List<ProxyNode>> transformProxyChainString(List<String> proxyChainList, boolean isTopicName);


    /**
     * 根据代理链生成XrayConfig配置文件和订阅信息文件
     * Config配置会返回， 订阅不会返回
     * Config和Subscribe都会被持久化，并且上传至OSS中，订阅地址为固定的地址
     *
     * @param allNetworkPathList 完整的代理链
     * @return
     */
    List<XrayConfigInfo> generateXrayConfigFromNodeList(List<List<ProxyNode>> allNetworkPathList);


    /**
     * 手动更新代理链缓存, 并返回结果
     *
     * @return
     */
    HashMap<String, ProxyNode> manualUpdateProxyNodeListCache();


    /**
     * 根据代理链的配置生成订阅地址
     *
     * @param allNetworkPathList
     * @param chainPortMap
     */
    List<VmessShare> generateSubscribeString(List<List<ProxyNode>> allNetworkPathList, HashMap<String, Integer> chainPortMap);

    /**
     * [实际完整流程] - 根据代理链生成XrayConfig配置文件和订阅信息文件
     * <p>
     * Config配置会返回， 订阅不会返回
     * Config和Subscribe都会被持久化，并且上传至OSS中，订阅地址为固定的地址
     */
    List<XrayConfigInfo> ProxyChainUpdateProcedure(List<String> proxyChainList, boolean isTopicName);

}
