<?php
class SlusheBridge extends BridgeAbstract {

	const MAINTAINER = 'quickwick';
	const NAME = 'Slushe';
	const URI = 'https://slushe.com';
	const DESCRIPTION = 'Returns latest posts from Slushe';

	const PARAMETERS = array(
		'Artist' => array(
			'artist_name' => array(
				'name' => 'Artist name',
				'required' => true,
				'exampleValue' => 'lexx228',
				'title' => 'Enter an artist name'
			)
		),
		'Category' => array(
			'category' => array(
				'name' => 'Category',
				'type' => 'list',
				'defaultValue' => 'Safe for Work',
				'title' => 'Choose a category',
				'values' => array(
					'2D' => '29',
					'3DX' => '58',
					'Animation' => '60',
					'Anime Fan Art' => '46',
					'BDSM' => '47',
					'Big Butt' => '73',
					'Big Dick' => '52',
					'Bit Tits' => '49',
					'Bisexual' => '69',
					'Comic' => '51',
					'Couple' => '3',
					'Dickgirl/Futanari' => '56',
					'Feet' => '75',
					'Game Fan Art' => '63',
					'Gay' => '36',
					'GIF' => '42',
					'Group Sex/ Orgy' => '62',
					'Lesbian' => '67',
					'Mature' => '72',
					'Misc. Fan Art' => '68',
					'Monster' => '64',
					'Pin-Up' => '28',
					'Safe for Work' => '71',
					'SFM' => '70',
					'Solo' => '66',
					'Threesome' => '38',
					'TV & Film Fan Art' => '34',
					'Western Fan Art' => '33'
				)
			)
		),
		'Search' => array(
			'search_term' => array(
				'name' => 'Search term(s)',
				'required' => true,
				'exampleValue' => 'pole dance',
				'title' => 'Enter one or more search terms, separated by spaces'
			)
		)
	);

	public function getName(){
		switch($this->queriedContext) {
			case 'Artist':
				return 'Slushe Artist: ' . $this->getInput('artist_name');
				break;
			case 'Category':
				return 'Slushe Category: ' . $this->getInput('category');
				break;
			case 'Search':
				return 'Slushe Search: ' . $this->getInput('search_term');
				break;
			default:
				return self::NAME;
		}
	}

	public function collectData(){
		switch($this->queriedContext) {
			case 'Artist':
				$uri = self::URI . '/' . $this->getInput('artist_name');
				break;
			case 'Category':
				$uri = self::URI . '/search/posts/channels?niche=' .
					$this->getInput('category');
				break;
			case 'Search':
				$uri = self::URI . '/search/posts/' . $this->getInput('search_term') .
					'?s=1';
				break;
		}

		$headers = array(
			'Authority : slushe.com',
			'Cookie: age-verify=1;',
			'sec-ch-ua: "Chromium";v="100", " Not A;Brand";v="99"',
			'sec-ch-ua-mobile: ?0',
			'sec-ch-ua-platform: "Windows"',
			'sec-fetch-dest: document',
			'sec-fetch-mode: navigate',
			'sec-fetch-site: same-origin',
			'sec-fetch-user: ?1',
			'upgrade-insecure-requests: 1'
		);
		// Add user-agent string to headers with implode, due to line length limit
		$user_agent_string = [
			'user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/',
			'537.36(KHTML, like Gecko) Chrome/100.0.4896.147 Safari/537.36'
		];
		$headers[] = implode('', $user_agent_string);

		$html = getSimpleHTMLDOM($uri, $headers);

		//Debug::log($html);
		//Debug::log($html->find('div.blog-item')[0]);

		//Loop on each entry
		foreach($html->find('div.blog-item') as $element) {
			//Debug::log($element);

			$title = $element->find('h3.title', 0)->first_child()->innertext;
			$article_uri = $element->find('h3.title', 0)->first_child()->href;
			$timestamp = $element->find('div.publication-date', 0)->innertext;
			$author = $element->find('div.artist', 0)->
				first_child()->first_child()->innertext;

			// Create & populate item
			$item = array();
			$item['uri'] = $article_uri;
			$item['id'] = $item['uri'];
			$item['timestamp'] = $timestamp;
			$item['title'] = $title;
			$item['author'] = $author;

			$media_html = '';

			// Look for image thumbnails
			$media_uris = $element->find('div.thumb', 0);
			if (isset($media_uris)) {
				// Add gallery image count, if it exists
				$gallery_count = $media_uris->find('span.count', 0);
				if (isset($gallery_count)) {
					$media_html .= '<p>Gallery count: ' .
						$gallery_count->first_child()->innertext . '</p>';
				}
				// Add image thumbnail(s)
				foreach($media_uris->find('img') as $media_uri) {
					$media_html .= '<a href="' . $article_uri . '">' . $media_uri . '</a>';
					//Debug::log('Adding to enclosures: ' . str_replace(' ', '%20', $media_uri->src));
					$item['enclosures'][] = str_replace(' ', '%20', $media_uri->src);
				}
			}

			// Look for video thumbnails
			$media_uris = $element->find('div.thumb-holder', 0);
			// Add video thumbnail(s)
			if (isset($media_uris)) {
				foreach($media_uris->find('img') as $media_uri) {
					$media_html .= '<p>Video:</p><a href="' .
						$article_uri . '">' . $media_uri . '</a>';
					//Debug::log('Adding to enclosures: ' . $media_uri->src);
					$item['enclosures'][] = $media_uri->src;
				}
			}
			$item['content'] = $media_html;

			if(isset($item['title'])) {
				$this->items[] = $item;
			}
		}
	}
}