package com.example.ShadowSocksShare.service.impl;

import com.example.ShadowSocksShare.domain.ShadowSocksDetailsEntity;
import com.example.ShadowSocksShare.service.ShadowSocksCrawlerService;
import lombok.Getter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashSet;
import java.util.Set;

/**
 * iShadow
 * https://global.ishadowx.net/
 */
@Slf4j
@Service
public class WuwRedCrawlerServiceImpl extends ShadowSocksCrawlerService {
	// 目标网站 URL
	private static final String TARGET_URL = "http://i.wuw.red/";
	// 访问目标网站,是否启动代理
	@Value("${proxy.enable}")
	@Getter
	private boolean proxyEnable;
	// 代理地址
	@Getter
	@Value("${proxy.host}")
	private String proxyHost;
	// 代理端口
	@Getter
	@Value("${proxy.port}")
	private int proxyPort;

	/**
	 * 网页内容解析 ss 信息
	 */
	@Override
	protected Set<ShadowSocksDetailsEntity> parse(Document document) {
		Elements tableList = document.select("div.elementor-tabs-content-wrapper table");

		Set<ShadowSocksDetailsEntity> set = new HashSet<>();
		for (int i = 0; i < tableList.size(); i++) {
			try {
				Element table = tableList.get(i);
				// 取 h4 信息,为 ss 信息
				Elements ssHtml = table.select("tr");

				if (StringUtils.equalsAnyIgnoreCase("shadowsocksR", table.select("tr td").first().text())) {
					String server = ssHtml.get(1).select("td").get(1).text();
					int server_port = 5240;
					String password = ssHtml.get(3).select("td").get(1).text();
					String method = ssHtml.get(4).select("td").get(1).text();

					String obfs = ssHtml.get(5).select("td").get(1).text();
					String protocol = ssHtml.get(6).select("td").get(1).text();
					// log.debug("---------------->{}={}={}={}={}={}", server, server_port, password, method, obfs, protocol);

					ShadowSocksDetailsEntity ss = new ShadowSocksDetailsEntity(server, server_port, password, method, protocol, obfs);
					ss.setValid(false);
					ss.setValidTime(new Date());
					ss.setTitle(document.title());
					ss.setRemarks(TARGET_URL);
					ss.setGroup("ShadowSocks-Share");

					// 测试网络
					if (isReachable(ss))
						ss.setValid(true);

					// 无论是否可用都入库
					set.add(ss);

					log.debug("*************** 第 {} 条 ***************{}{}", set.size(), System.lineSeparator(), ss);
				}

			} catch (Exception e) {
				log.error(e.getMessage(), e);
			}
		}
		return set;
	}

	/**
	 * 目标网站 URL
	 */
	@Override
	protected String getTargetURL() {
		return TARGET_URL;
	}
}