<?php

	use Entities\ResourceLogItem;
	use Entities\Track;
	use Illuminate\Support\Facades\App;

	class TracksController extends Controller {
		public function getIndex() {
			return View::make('tracks.index');
		}

		public function getEmbed($id) {
			$track = Track::find($id);
			if (!$track || !$track->canView(Auth::user()))
				App::abort(404);

			return View::make('tracks.embed', ['track' => $track]);
		}

		public function getTrack($id, $slug) {
			$track = Track::find($id);
			if (!$track || !$track->canView(Auth::user()))
				App::abort(404);

			if ($track->slug != $slug)
				return Redirect::action('TracksController@getTrack', [$id, $track->slug]);

			return View::make('tracks.show');
		}

		public function getShortlink($id) {
			$track = Track::find($id);
			if (!$track || !$track->canView(Auth::user()))
				App::abort(404);

			return Redirect::action('TracksController@getTrack', [$id, $track->slug]);
		}

		public function getStream($id) {
			$track = Track::find($id);
			if (!$track || !$track->canView(Auth::user()))
				App::abort(404);

			$format = Track::$Formats['MP3'];
			ResourceLogItem::logItem('track', $id, ResourceLogItem::PLAY, $format['index']);

			$response = Response::make('', 200);
			$response->header('X-Sendfile', $track->getFileFor('MP3'));
			$response->header('Content-Disposition', 'filename="' . $track->getFilenameFor('MP3') . '"');
			$response->header('Content-Type', $format['mime_type']);

			return $response;
		}

		public function getDownload($id, $extension) {
			$track = Track::find($id);
			if (!$track || !$track->canView(Auth::user()))
				App::abort(404);

			$format = null;
			$formatName = null;

			foreach (Track::$Formats as $name => $item) {
				if ($item['extension'] == $extension) {
					$format = $item;
					$formatName = $name;
					break;
				}
			}

			if ($format == null)
				App::abort(404);

			ResourceLogItem::logItem('track', $id, ResourceLogItem::DOWNLOAD, $format['index']);

			$response = Response::make('', 200);
			$response->header('X-Sendfile', $track->getFileFor($formatName));
			$response->header('Content-Disposition', 'attachment; filename="' . $track->getDownloadFilenameFor($formatName) . '"');
			$response->header('Content-Type', $format['mime_type']);

			return $response;
		}
	}