<?php

namespace App\Packages\User\Controllers;

use App\Http\Controllers\Controller;
use App\Packages\Company\Manager\EntityManager as CompanyEntityManager;
use App\Packages\Company\Requests\CreateRequest;
use App\Packages\File\Requests\SquareImageRequest;
use App\Packages\User\Requests\ChangeEmailRequest;
use App\Packages\User\Requests\ChangePasswordRequest;
use App\Packages\User\Requests\ContactsRequest;
use App\Packages\User\Requests\PersonalRequest;
use App\Services\FileSystem\FileSystemService;
use Illuminate\Auth\AuthManager;
use Illuminate\Http\RedirectResponse;
use Illuminate\Routing\ResponseFactory;
use Illuminate\View\Factory;
use Redirect;
use Response;
use View;

/**
 * Class DashboardActionController
 * @package App\Http\Controllers\User
 */
class DashboardActionController extends Controller
{
	use TraitUserDashboardController;

	/**
	 * CompanyController constructor.
	 *
	 * @param AuthManager $authManager
	 */
	public function __construct(AuthManager $authManager)
	{
		$this->userMiddleware($authManager);
	}

	/**
	 * @param PersonalRequest $request
	 *
	 * @return RedirectResponse|Factory|View
	 */
	public function editPersonal(PersonalRequest $request)
	{
		$this->user->entityManager()
			->updatePersonal($request);

		return Redirect::to($this->user->router()->pageAccount());
	}

	/**
	 * @param ContactsRequest $request
	 *
	 * @return RedirectResponse|Factory|View
	 */
	public function editContacts(ContactsRequest $request)
	{
		$this->user->entityManager()
			->updateContacts($request);

		return Redirect::to($this->user->router()->pageAccount());
	}

	/**
	 * @param ChangeEmailRequest $emailRequest
	 *
	 * @return RedirectResponse
	 */
	public function editEmail(ChangeEmailRequest $emailRequest)
	{
		if (!$this->user->checkPassword($emailRequest->old_password)) {
			return back()->withErrors(['Password does not match']);
		}

		$this->user->entityManager()
			->updateEmail($emailRequest->email);

		//flash('Email updated')->success();

		return Redirect::to($this->user->router()->pageAccount());
	}

	/**
	 * @param ChangePasswordRequest $passwordRequest
	 *
	 * @return RedirectResponse
	 */
	public function editPassword(ChangePasswordRequest $passwordRequest)
	{
		if (!$this->user->checkPassword($passwordRequest->old_password)) {
			return back()->withErrors(['Password does not match']);
		}

		$this->user->entityManager()
			->updatePassword($passwordRequest->password);
		/** @TODO: Add flash data */
		//		flash('Password updated')->success();

		return Redirect::to($this->user->router()->pageAccount());
	}

	/**
	 * @param SquareImageRequest $imageRequest
	 * @param FileSystemService $fileSystem
	 *
	 * @return ResponseFactory|Response
	 */
	public function uploadImage(SquareImageRequest $imageRequest, FileSystemService $fileSystem)
	{
		$file = $imageRequest->file('file');

		/** Upload file */
		$storedFile = $fileSystem->uploadFile($file);

		/** Update user avatar relation */
		$this->user->entityManager()
			->updateAvatar($storedFile);

		return response(
			$storedFile->getFileLocalUrl()
		);
	}

	/**
	 * @return ResponseFactory|Response
	 */
	public function removeImage()
	{
		$this->user->entityManager()
			->removeAvatar();

		return response(
			$this->user->avatarUrl()
		);
	}
}
