<?php

class GiphyBridge extends BridgeAbstract {

	const MAINTAINER = 'dvikan';
	const NAME = 'Giphy Bridge';
	const URI = 'https://giphy.com/';
	const CACHE_TIMEOUT = 60 * 60 * 8; // 8h
	const DESCRIPTION = 'Bridge for giphy.com';

	const PARAMETERS = array( array(
		's' => array(
			'name' => 'search tag',
			'required' => true
		),
		'n' => array(
			'name' => 'max number of returned items (max 50)',
			'type' => 'number',
			'exampleValue' => 3,
		)
	));

	public function collectData() {
		/**
		 * This uses a public beta key which has severe rate limiting.
		 *
		 * https://giphy.api-docs.io/1.0/welcome/access-and-api-keys
		 * https://giphy.api-docs.io/1.0/gifs/search-1
		 */
		$apiKey = 'dc6zaTOxFJmzC';
		$limit = min($this->getInput('n') ?: 10, 50);
		$uri = sprintf(
			'https://api.giphy.com/v1/gifs/search?q=%s&limit=%s&api_key=%s',
			rawurlencode($this->getInput('s')),
			$limit,
			$apiKey
		);

		$result = json_decode(getContents($uri));

		foreach($result->data as $entry) {
			$createdAt = new \DateTime($entry->import_datetime);

			$this->items[] = array(
				'id'		=> $entry->id,
				'uri'		=> $entry->url,
				'author'	=> $entry->username,
				'timestamp'	=> $createdAt->format('U'),
				'title'		=> $entry->title,
				'content'	=> <<<HTML
<a href="{$entry->url}">
<img
	src="{$entry->images->downsized->url}"
	width="{$entry->images->downsized->width}"
	height="{$entry->images->downsized->height}" />
</a>
HTML
			);
		}

		usort($this->items, function ($a, $b) {
			return $a['timestamp'] < $b['timestamp'];
		});
	}
}