<?php

include "data/config.php";
include "lib/curlproxy.php";
$proxy = new proxy();

if(!isset($_GET["i"])){
	
	header("X-Error: No URL(i) provided!");
	$proxy->do404();
	die();
}

try{
	
	// original size request, stream file to browser
	if(
		!isset($_GET["s"]) ||
		$_GET["s"] == "original"
	){
		
		$proxy->stream_linear_image($_GET["i"]);
		die();
	}
	
	// bing request, ask bing to resize and stream to browser
	$image = parse_url($_GET["i"]);
	
	if(
		isset($image["host"]) &&
		preg_match(
			'/^[A-z0-9.]*bing\.(net|com)$/i',
			$image["host"]
		)
	){
		
		if(!isset($image["path"])){
			
			header("X-Error: Missing bing image path");
			$proxy->do404();
			die();
		}
		
		//
		// get image ID
		// formations:
		// https://tse2.mm.bing.net/th/id/OIP.3yLBkUPn8EXA1wlhWP2BHwHaE3
		// https://tse2.mm.bing.net/th?id=OIP.3yLBkUPn8EXA1wlhWP2BHwHaE3
		//
		$id = null;
		if(isset($image["query"])){
			
			parse_str($image["query"], $str);
			
			if(isset($str["id"])){
				
				$id = $str["id"];
			}
		}
		
		if($id === null){
			
			$id = explode("/th/id/", $image["path"], 2);
			
			if(count($id) !== 2){
				
				// malformed
				return $url;
			}
			
			$id = $id[1];
		}
		
		if(is_array($id)){
			
			header("X-Error: Missing bing id parameter");
			$proxy->do404();
			die();
		}
			
		switch($_GET["s"]){
			
			case "portrait": $req = "&w=50&h=90&p=0&qlt=90"; break;
			case "landscape": $req = "&w=160&h=90&p=0&qlt=90"; break;
			case "square": $req = "&w=90&h=90&p=0&qlt=90"; break;
			case "thumb": $req = "&w=236&h=180&p=0&qlt=90"; break;
			case "cover": $req = "&w=207&h=270&p=0&qlt=90"; break;
		}
		
		$proxy->stream_linear_image("https://" . $image["host"] . "/th?id=" . rawurlencode($id) . $req, "https://www.bing.com");
		die();
	}
	
	// resize image ourselves
	$payload = $proxy->get($_GET["i"], $proxy::req_image, true);
	
	// get image format & set imagick
	$image = null;
	$format = $proxy->getimageformat($payload, $image);
	
	try{
		
		if($format !== false){
			$image->setFormat($format);
		}
		
		$image->readImageBlob($payload["body"]);
		
		$image_width = $image->getImageWidth();
		$image_height = $image->getImageHeight();
		
		switch($_GET["s"]){
			
			case "portrait":
				$width = 50;
				$height = 90;
				break;
			
			case "landscape":
				$width = 160;
				$height = 90;
				break;
			
			case "square":
				$width = 90;
				$height = 90;
				break;
			
			case "thumb":
				$width = 236;
				$height = 180;
				break;
			
			case "cover":
				$width = 207;
				$height = 270;
				break;
		}
		
		$ratio = $image_width / $image_height;
		
		if($image_width > $width){
			
			$image_width = $width;
			$image_height = round($image_width / $ratio);
		}
		if($image_height > $height){
			
			$ratio = $image_width / $image_height;
			$image_height = $height;
			$image_width = $image_height * $ratio;
		}
		
		$image->setImageBackgroundColor("#504945");
		$image->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
		
		$image->stripImage();
		$image->setFormat("jpeg");
		$image->setImageCompressionQuality(90);
		$image->setImageCompression(Imagick::COMPRESSION_JPEG2000);
		
		$image->resizeImage($image_width, $image_height, Imagick::FILTER_LANCZOS, 1);
		
		$proxy->getfilenameheader($payload["headers"], $_GET["i"]);
		
		header("Content-Type: image/jpeg");
		echo $image->getImageBlob();
		
	}catch(ImagickException $error){
		
		header("X-Error: Could not convert the image: (" . $error->getMessage() . ")");
		$proxy->do404();
	}
	
}catch(Exception $error){
	
	header("X-Error: " . $error->getMessage());
	$proxy->do404();
	die();
}
