<?php
/**
  * @method 
  * @author soul
  * @copyright 2016/3/31
  */
class OthBase
{
	/**
	  * @method 更新代理地址
	  * @param  $type   [必填] get获取|update更新|del
	  * @param  $site   [必填] 站点标识
	  * @param  $ip     [选填] del时提供
	  * @author soul
	  * @copyright 2022/2/11
	  * @return {"status":true,"data":{"ip":"1.196.42.204","port":4247,"expire_time":"2022-12-03 11:30:29"},"code":0,"runtime":126} 
	   */
	public function dailiIp($type, $site, $ip = '')
	{
		$cacheFile = mvc::$cfg['AUTOLOAD']['Oth']['path'].'cache/daili.php';
		$cacheArr = [];
		if(file_exists($cacheFile)) $cacheArr = include($cacheFile);
		if(!is_array($cacheArr)) $cacheArr = [];
		$arr = [];
		switch($type)
		{
			case 'get': 
				$hasArr = [];
				foreach($cacheArr as $ip=>$tv)
				{
					if(strtotime($tv['val']['expire_time']) < time()){
						unset($cacheArr[$ip]);
						LibFc::ArraySave($cacheArr, $cacheFile);
						continue;
					}
					if(empty($tv['del']) || !in_array($site, $tv['del']))
						$hasArr[] = $tv['val'];
				}
				if(!empty($hasArr)){
					shuffle($hasArr);
					$arr = $hasArr[0];
				}else{
					return $this->dailiIp('update', $site, $ip);
				}
			break;
			case 'update': 
				$url = 'http://webapi.http.zhimacangku.com/getip?num=1&type=2&pro=&city=0&yys=0&port=1&time=1&ts=1&ys=0&cs=0&lb=1&sb=0&pb=45&mr=1&regions=';
				$LibHttp = new LibHttp(false, false);
				$html = $LibHttp->fetch($url);
				if(preg_match('/请添加白名单(\d+\.\d+\.\d+\.\d+)/', $html, $match))
				{
					$LibHttp = new LibHttp();
					$LibHttp->fetch('https://wapi.http.linkudp.com/index/index/save_white?neek=360103&appkey=82edeba4f93079651a7d2a6d0082b0da&white='.$match[1]);
					return $this->dailiIp($type, $site, $ip);
				}else if(stripos($html, '秒后再试')){
					sleep(2);
					return $this->dailiIp($type, $site, $ip);
				}
				$json = json_decode($html, true);
				if(is_array($json) && !empty($json['data'][0]['ip']))
				{
					foreach($json['data'] as $dv)
					{
						$arr = $dv;
						$cacheArr[$dv['ip']] = [
							'atime'=>date('Y-m-d H:i:s'),	
							'val'=>$dv,	
							'del'=>[]
						];
					}
					LibFc::ArraySave($cacheArr, $cacheFile);
				}else{
					return LibFc::ReturnData(false, 'daili'.$html);
				}
			break;
			case 'del': 
				if(!empty($cacheArr[$ip]) && !in_array($site, $cacheArr[$ip]['del']))
				{
					$cacheArr[$ip]['del'][] = $site;
					LibFc::ArraySave($cacheArr, $cacheFile);
				}
			break;
		}
		return LibFc::ReturnData(true, $arr);
	}
}