<?PHP

require_once 'class.templatepage.php';
// require_once('class.amazon.php');

class MusicPage extends TemplatePage {
	var $sorts = [
		'relevance' => 'relevance * LOG(100 + music.views) DESC', // relevance
		'title-asc' => 'pieces.sort_key ASC, music.title ASC', // name (a-z)
		'title-desc' => 'pieces.sort_key DESC, music.title DESC', // name (z-a)
		'views-desc' => 'music.views DESC', // most viewed
		'downloads-desc' => 'music.downloads DESC', // most downloaded
		'listens-desc' => 'music.listens DESC', // most listened to
		'added-desc' => 'music.added DESC', // most recent
		'score-desc' => 'music.avg_score DESC, music.votes DESC, music.favourites DESC, music.views DESC', // top rated
		'favourites-desc' => 'music.favourites DESC', // most likes
	];

	var $link_sorts = [
		'relevance' => 'relevance * LOG(100 + music_links.views) DESC', // relevance
		'title-asc' => 'pieces.sort_key ASC, music_links.title ASC', // name (a-z)
		'title-desc' => 'pieces.sort_key DESC, music_links.title DESC', // name (z-a)
		'views-desc' => 'music_links.views DESC', // most viewed
		'downloads-desc' => 'music_links.views DESC',// 'music_links.downloads DESC', // most downloaded
		'listens-desc' => 'music_links.views DESC',// 'music_links.listens DESC', // most listened to
		'added-desc' => 'music_links.added DESC', // most recent
		'score-desc' => 'music_links.avg_score DESC, music.votes DESC, music.favourites DESC, music.views DESC', // top rated
		'favourites-desc' => 'music_links.votes DESC',// 'music.favourites DESC', // most likes
	];

	public function __construct() {
		# if(!count($_GET))
		# $this->cache_time = 3600; //cache landing page
		if ( count( $_GET ) == 1 && isset( $_GET['music_id'] ) ) {
			$this->cache_time = 3600 * 24;
			$this->cache_qs = [ 'music_id' ];
		}

		parent::__construct();
	}

	function standard_headers() {
		parent::standard_headers();
	}

	public function generate() {
		$this->common_title = $this->language( 'title-music' );

		$edit = getInt( 'edit' );
		$delete = getInt( 'delete' );
		$edittheme = getInt( 'edittheme' );
		$downloaded = getInt( 'downloaded' );
		$music_id = getInt( 'music_id' );
		$add_id = getInt( 'add_id' );
		$like = getInt( 'like', null );
		$composer_id = getInt( 'composer_id' );
		$piece_id = getInt( 'piece_id' );

		// Show/edit music
		if ( $music_id ) {
			$this->write_menu( 'music' );
			$this->add_breadcrumb( $this->language( 'breadcrumb-all-music' ), 'musicsearch' );
			// Load music
			if ( $edit || $delete || $edittheme ) {
				$this->musicService->clearById( $music_id );
			}
			$row = $this->musicService->getById( $music_id );
			// Check music exists
			if ( $row ) {
				$music = new Music( $this, $row );
				// $music->add_view();
				// Edit music
				if ( $edit || $delete || $edittheme ) {
					require 'music.edit.php';
				} elseif ( $downloaded ) {
					$object = $music;
					require 'music.downloaded.php';
				} else {
					// Show music
					require 'music.view.php';
				}
			} else {
				$this->redirect( "{$this->base}/musicsearch" );
			}
		// Upload
		} elseif ( $edit ) {
			require 'music.upload.php';
		// Music search
		} else {
			$this->write_menu( 'music' );
			$this->render_music_search( true );
		}
	}

	public function render_music_search_results() {
		$only_results = true;
		$full_page = false;
		require 'music.search.php';
	}

	public function render_music_search( $full_page = false ) {
		if ( !$full_page ) {
			$_GET['page'] = $_POST['page'] = 1;
		}
		$only_results = false;
		$this->output( '<div id="music_search">' );
		require 'music.search.php';
		$this->output( '</div>' );
		$this->output( '
			new UpdatePanelForm( "#music_search", null, "#form_basic" );
			new UpdatePanelForm( "#music_search", null, "#form_advanced" );
		', 'script', 'javascript' );
	}
}
new MusicPage();
