<?php

	namespace Commands;

	use Entities\Album;
	use Entities\Favourite;
	use Entities\Follower;
	use Entities\Playlist;
	use Entities\ResourceUser;
	use Entities\Track;
	use Illuminate\Support\Facades\Auth;
	use Illuminate\Support\Facades\DB;

	class ToggleFollowingCommand extends CommandBase {
		private $_resourceType;
		private $_resourceId;

		function __construct($resourceType, $resourceId) {
			$this->_resourceId = $resourceId;
			$this->_resourceType = $resourceType;
		}

		/**
		 * @return bool
		 */
		public function authorize() {
			$user = Auth::user();
			return $user != null;
		}

		/**
		 * @throws \Exception
		 * @return CommandResponse
		 */
		public function execute() {
			$typeId = $this->_resourceType . '_id';
			$existing = Follower::where($typeId, '=', $this->_resourceId)->whereUserId(Auth::user()->id)->first();
			$isFollowed = false;

			if ($existing) {
				$existing->delete();
			} else {
				$follow = new Follower();
				$follow->$typeId = $this->_resourceId;
				$follow->user_id = Auth::user()->id;
				$follow->created_at = time();
				$follow->save();
				$isFollowed = true;
			}

			$resourceUser = ResourceUser::get(Auth::user()->id, $this->_resourceType, $this->_resourceId);
			$resourceUser->is_followed = $isFollowed;
			$resourceUser->save();

			return CommandResponse::succeed(['is_followed' => $isFollowed]);
		}
	}