<?php

class DiscogsBridge extends BridgeAbstract {

	const MAINTAINER = 'teromene';
	const NAME = 'DiscogsBridge';
	const URI = 'https://www.discogs.com/';
	const DESCRIPTION = 'Returns releases from discogs';
	const PARAMETERS = array(
		'Artist Releases' => array(
			'artistid' => array(
				'name' => 'Artist ID',
				'type' => 'number',
			)
		),
		'Label Releases' => array(
			'labelid' => array(
				'name' => 'Label ID',
				'type' => 'number',
			)
		),
		'User Wantlist' => array(
			'username_wantlist' => array(
				'name' => 'Username',
				'type' => 'text',
			)
		),
		'User Folder' => array(
			'username_folder' => array(
				'name' => 'Username',
				'type' => 'text',
			),
			'folderid' => array(
				'name' => 'Folder ID',
				'type' => 'number',
			)
		)
	);

	public function collectData() {

		if(!empty($this->getInput('artistid')) || !empty($this->getInput('labelid'))) {

			if(!empty($this->getInput('artistid'))) {
				$data = getContents('https://api.discogs.com/artists/'
						. $this->getInput('artistid')
						. '/releases?sort=year&sort_order=desc')
						or returnServerError('Unable to query discogs !');
			} elseif(!empty($this->getInput('labelid'))) {
				$data = getContents('https://api.discogs.com/labels/'
						. $this->getInput('labelid')
						. '/releases?sort=year&sort_order=desc')
						or returnServerError('Unable to query discogs !');
			}

			$jsonData = json_decode($data, true);
			foreach($jsonData['releases'] as $release) {

				$item = array();
				$item['author'] = $release['artist'];
				$item['title'] = $release['title'];
				$item['id'] = $release['id'];
				$resId = array_key_exists('main_release', $release) ? $release['main_release'] : $release['id'];
				$item['uri'] = self::URI . $this->getInput('artistid') . '/release/' . $resId;

				if(isset($release['year'])) {
					$item['timestamp'] = DateTime::createFromFormat('Y', $release['year'])->getTimestamp();
				}

				$item['content'] = $item['author'] . ' - ' . $item['title'];
				$this->items[] = $item;
			}

		} elseif(!empty($this->getInput('username_wantlist')) || !empty($this->getInput('username_folder'))) {

			if(!empty($this->getInput('username_wantlist'))) {
				$data = getContents('https://api.discogs.com/users/'
						. $this->getInput('username_wantlist')
						. '/wants?sort=added&sort_order=desc')
						or returnServerError('Unable to query discogs !');
				$jsonData = json_decode($data, true)['wants'];

			} elseif(!empty($this->getInput('username_folder'))) {
				$data = getContents('https://api.discogs.com/users/'
						. $this->getInput('username_folder')
						. '/collection/folders/'
						. $this->getInput('folderid')
						. '/releases?sort=added&sort_order=desc')
						or returnServerError('Unable to query discogs !');
				$jsonData = json_decode($data, true)['releases'];
			}
			foreach($jsonData as $element) {

				$infos = $element['basic_information'];
				$item = array();
				$item['title'] = $infos['title'];
				$item['author'] = $infos['artists'][0]['name'];
				$item['id'] = $infos['artists'][0]['id'];
				$item['uri'] = self::URI . $infos['artists'][0]['id'] . '/release/' . $infos['id'];
				$item['timestamp'] = strtotime($element['date_added']);
				$item['content'] = $item['author'] . ' - ' . $item['title'];
				$this->items[] = $item;

			}
		}

	}

	public function getURI() {
		return self::URI;
	}

	public function getName() {
		return static::NAME;
	}
}
