<?php

namespace gp\tool;

defined('is_running') or die('Not an entry point...');


class Headers{


	/**
	 * Return a list of all http headers from the $_SERVER superglobal
	 * If $which is specified, return that single header
	 *
	 * @param string $which
	 * @return string|array
	 *
	 */
	public static function RequestHeaders($which = false){
		$headers = [];
		foreach($_SERVER as $key => $value) {
			if( substr($key, 0, 5) <> 'HTTP_' ){
				continue;
			}

			$header = str_replace(' ', '-', ucwords(str_replace('_', ' ', strtolower(substr($key, 5)))));

			if( $which ){
				if( strnatcasecmp($which,$header) === 0){
					return $value;
				}
			}

			$headers[$header] = $value;
		}
		if( !$which ){
			return $headers;
		}
	}


	/**
	 * Find a matching mime type from the 'accept' headers
	 *
	 * @param array $accepts List of
	 * @return string
	 *
	 */
	public static function AcceptMime($accepts){

		$accept		= self::RequestHeaders('accept');

		if( $accept && preg_match_all('#([^,;\s]+)\s*;?\s*(?:q=([^,;\s]+))?#',$accept,$matches,PREG_SET_ORDER) ){

			// filter acceptable mimes, default qvalue = 1
			foreach($matches as $match){

				$_mime = trim($match[1]);

				if( !array_key_exists($_mime, $accepts) ){
					continue;
				}

				if( isset($match[2]) ){
					$accepts[$_mime] = (float)$match[2];
				}else{
					$accepts[$_mime] += 1;
				}
			}
		}

		// best mime will be first in the list after arsort()
		arsort($accepts);
		return key($accepts);
	}

}