<?php
class RutubeBridge extends BridgeAbstract {

	const NAME = 'Rutube';
	const URI = 'https://rutube.ru';
	const MAINTAINER = 'em92';
	const DESCRIPTION = 'Выводит ленту видео';

	const PARAMETERS = array(
		'По каналу' => array(
			'c' => array(
				'name' => 'ИД канала',
				'exampleValue' => 1342940,  // Мятежник Джек
				'type' => 'number',
				'required' => true
			),
		),
		'По плейлисту' => array(
			'p' => array(
				'name' => 'ИД плейлиста',
				'exampleValue' => 83641,  // QRUSH
				'type' => 'number',
				'required' => true
			),
		),
	);

	protected $title;

	public function getURI() {
		if ($this->getInput('c')) {
			return self::URI . '/channel/' . strval($this->getInput('c')) . '/videos/';
		} else if ($this->getInput('p')) {
			return self::URI . '/plst/' . strval($this->getInput('p')) . '/';
		} else {
			return parent::getURI();
		}
	}

	public function getIcon() {
		return 'https://static.rutube.ru/static/favicon.ico';
	}

	public function getName() {
		if (is_null($this->title)) {
			return parent::getName();
		} else {
			return $this->title . ' - ' . parent::getName();
		}
	}

	private function getJSONData($html) {
		$jsonDataRegex = '/window.reduxState = (.*?);/';
		preg_match($jsonDataRegex, $html, $matches) or returnServerError('Could not find reduxState');
		return json_decode(str_replace('\x', '\\\x', $matches[1]));
	}

	public function collectData(){
		$link = $this->getURI();

		$html = getContents($link);
		$reduxState = $this->getJSONData($html);
		$videos = [];
		if ($this->getInput('c')) {
			$videos = $reduxState->userChannel->videos->results;
			$this->title = $reduxState->userChannel->info->name;
		} else if ($this->getInput('p')) {
			$videos = $reduxState->playlist->data->results;
			$this->title = $reduxState->playlist->title;
		}

		foreach($videos as $video) {
			$item = new FeedItem();
			$item->setTitle($video->title);
			$item->setURI($video->video_url);
			$content = '<a href="' . $item->getURI() . '">';
			$content .= '<img src="' . $video->thumbnail_url . '" />';
			$content .= '</a><br/>';
			$content .= nl2br(
				// Converting links in plaintext
				// Copied from https://stackoverflow.com/a/12590772
				preg_replace(
					'$(https?://[a-z0-9_./?=&#-]+)(?![^<>]*>)$i', ' <a href="$1" target="_blank">$1</a> ',
					$video->description . ' '
				)
			);
			$item->setContent($content);
			$this->items[] = $item;
		}
	}
}