<?PHP

require_once '../class.page.php';

class FBThumbnail extends Page {

	var $includepath = '..';
	var $is_media = true;

	public function __construct() {
		parent::__construct();
		$w = getInt( 'w', 90 );
		$type = getString( 'type' );
		$id = getString( 'id' );
		$useShadow = true;

		switch ( $type ) {
			case 'music':
				$music = new Music( $this );
				$music->set_data( 'music_id', $id );
				if ( $music->reload() ) {
					$file = $music->get_png( 'full', false );
				} else {
					return;
				}
				break;
			case 'composers':
				$composer = new Composer( $this );
				$composer->set_data( 'composer_id', $id );
				if ( $composer->reload() && $composer->has_photo() ) {
					$file = $composer->get_photo( 'full', false );
				} else {
					return;
				}
				break;
			case 'imslp_thumbnails':
				$thumb = new ImslpThumbnail( $this );
				$thumb->set_data( 'thumbnail_id', $id );
				if ( $thumb->reload() ) {
					$file = $thumb->get_png( 'full', false );
				} else {
					return;
				}
				break;
			case 'anthem':
				$id = preg_replace( '/[\.\/]/', '', $id );
				$file = '../images/flags/48/' . $id . '.png';
				$useShadow = false;
				break;
			default:
				return;
		}

		$s = $useShadow ? 5 : 0;
		$im = new Imagick( $file );

		/* Make the image a little smaller, maintain aspect ratio */
		if ( $useShadow || $im->getImageWidth() > $w || $im->getImageHeight() > $w ) {
			$im->thumbnailImage( max( 10, $w - ( $s * 2 ) ), max( 10, $w - ( $s * 2 ) ), true );
			$im->unsharpMaskImage( 1, 0.8, 1.5, 0.02 );
		} else {
			$canvas = new Imagick( $file );
			$canvas->newImage( $w, $im->getImageHeight(), new ImagickPixel( 'white' ) );
			$canvas->setImageFormat( 'png' );
			$x = ( $w - $im->getImageWidth() ) / 2;
			$canvas->compositeImage( $im, Imagick::COMPOSITE_OVER, $x, 0 );
			$im = $canvas;
		}

		if ( $useShadow ) {
			$shadow = new Imagick();
			$shadow->newImage( $im->getImageWidth() + ( $s * 2 ), $im->getImageHeight() + ( $s * 2 ), new ImagickPixel( 'white' ) );
			$shadow->setImageFormat( 'png' );

			$box = new ImagickDraw();
			$box->setFillColor( new ImagickPixel( '#00000080' ) );
			$box->rectangle( $s, $s, $shadow->getImageWidth() - $s, $shadow->getImageHeight() - $s );

			$shadow->drawImage( $box );
			$shadow->blurImage( $s / 2, $s / 2 );
			$shadow->compositeImage( $im, Imagick::COMPOSITE_OVER, $s, $s );
			$shadow->borderImage( new ImagickPixel( 'white' ), ( $w - $shadow->getImageWidth() ) / 2, ( $w - $shadow->getImageHeight() ) / 2 );
		} else {
			$shadow = $im;
		}

		header( "Content-Type: image/png;" );
		echo $shadow->getImageBlob();
	}
}
new FBThumbnail();
