<?php

namespace App\Services\FileSystem;

use App\Packages\File\Models\FileUploaded;
use Illuminate\Http\UploadedFile;
use Image;

/**
 * Class FileSystemService
 * @package App\Services\FileSystem
 */
class FileSystemService
{
	protected $avatarSize = 200;

	/**
	 * @var FileSystemUploader
	 */
	private $fileSystemUploader;

	/**
	 * FileSystemService constructor.
	 *
	 * @param FileSystemUploader $fileSystemUploader
	 */
	public function __construct(FileSystemUploader $fileSystemUploader)
	{
		$this->fileSystemUploader = $fileSystemUploader;
	}

	/**
	 * @param UploadedFile $file
	 *
	 * @return FileUploaded
	 */
	public function uploadFile(UploadedFile $file)
	{
		$extension = $file->getClientOriginalExtension();

		$fileData = file_get_contents($file);
		$image = Image::make($fileData)
			->fit($this->avatarSize, $this->avatarSize)
			->encode('jpg');

		$fileContent = $image->getEncoded();

		/** Save info about file in database */
		$fileUploaded = FileUploaded::createFileData(
			file_get_contents($file),
			$extension,
			$file->getMimeType(),
			$file->getSize()
		);

		/** Save to local storage or ftp in future */
		$this->fileSystemUploader->uploadToLocalStorage($fileUploaded, $fileContent);

		/** Upload to digital ocean spaces */
		$this->fileSystemUploader->uploadToDigitalOceanSpaces($fileUploaded, $fileContent);

		return $fileUploaded;
	}
}
