<?php
/**
  * @method 短网址
  * @author soul
  */
class OthDwz
{
	/**
	 * @method 短网址
	 * @param  
	*/
	public function dwz($urlArr)
	{
		$arr = [];
		$urlArr = array_unique($urlArr);
		if(!empty($urlArr))
		{
			$urls = [];
			foreach($urlArr as $turl)
			{
				$arr[$turl] = ['url'=>$turl, 'dwz'=>''];
				$urls[] = LibFc::Escape($turl);
			}
			
			
			$MainBase = new MainBase();
			//已有部分
			$res = $MainBase->get('dwz', ['code','url'], sprintf(" and url in ('%s')", implode("','", $urls)));
			foreach($res['data'] as $v)
			{
				if($arr[$v['url']]['url'] == $v['url'])
				{//区分大小写
					$arr[$v['url']]['dwz'] = mvc::$cfg['HOST']['dwz'].$v['code'];
				}
			}
			$noArr = [];
			foreach($arr as $turl=>$v)
			{
				if(empty($v['dwz']))
				{
					$code = $this->dwzcode($turl);
					$arr[$turl]['dwz'] = mvc::$cfg['HOST']['dwz'].$code;
					$noArr[$turl] = $code;
				}
			}
			if(!empty($noArr))
			{//短网址是否存在
				$res = $MainBase->get('dwz', ['code','url'], sprintf(" and code in ('%s')", implode("','", $noArr)));
				$hasArr = array_column($res['data'], 'url', 'code');
				$addArr = [];
				foreach($noArr as $turl=>$code)
				{
					$addFlag = true;
					if(!empty($hasArr[$code]))
					{
						$addFlag = false;
						if($hasArr[$code] == $turl){
							$arr[$turl]['dwz'] = mvc::$cfg['HOST']['dwz'].$code;
							continue;
						}else{
							//短网址存在但是url不一样，重新创建短网址
							for($i = 0; $i < 10; $i++)
							{
								$newcode = $code.LibFc::randChars(2);
								$res = $MainBase->get('dwz', ['url'], sprintf(" and code ='%s'", $newcode), true);
								if(empty($res['data']) || (!empty($res['data']) && $res['data']['url'] == $turl)){
									//没有的直接新增
									if(empty($res['data'])) $addFlag = true;
									$code = $newcode;
									$arr[$turl]['dwz'] = mvc::$cfg['HOST']['dwz'].$code;
									break;
								}
							}
						}
					}

					if($addFlag)
					{
						$addArr[$code] = [
							'code'=>$code,
							'url'=>$turl,
							'atime'=>time(),
						];
					}
				}
				if(!empty($addArr))
				{
					$addArr = array_values($addArr);
					$MainBase->addAny('dwz', array_keys($addArr[0]), $addArr);
				}
			}
		}
		return LibFc::ReturnData(true, array_values($arr));
	}

	public function dwzcode($url)
	{
		// crc32() 函数计算字符串的 32 位 CRC（循环冗余校验）
		$x = sprintf("%u", crc32($url));
		$show = '';
		while($x > 0) {
			$s = $x % 62;
			if ($s > 35) {
				$s = chr($s+61);
			} elseif ($s > 9 && $s <=35) {
				$s = chr($s + 55);
			}
			$show .= $s;
			$x = floor($x/62);
		}
		return $show;
	}
}