<?php

namespace App\Packages\User\Service;

use App\Packages\User\Models\UserAvatar;
use GrahamCampbell\Flysystem\FlysystemManager;
use Intervention\Image\ImageManager;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use League\Flysystem\Filesystem;

/**
 * Class CapsuleUploadService
 * @package App\Packages\User\Services
 */
class UserImageUploadService
{
	/** @var FlysystemManager */
	public $flySystemManager;

	/** @var ImageManager */
	public $imageManager;

	/**
	 * FileSystemUploader constructor.
	 *
	 * @param FlysystemManager $flySystemManager
	 * @param ImageManager $imageManager
	 */
	public function __construct(FlysystemManager $flySystemManager, ImageManager $imageManager)
	{
		$this->flySystemManager = $flySystemManager;
		$this->imageManager = $imageManager;
	}

    /**
     * @param UserAvatar $userAvatar
     * @param $fileContent
     *
     * @return bool
     */
	public function uploadAvatar(UserAvatar $userAvatar, $fileContent)
    {
        /** Generate filename */
        $name = $userAvatar->generateName();

        /** @var Filesystem $spacesConnection */
        $spacesConnection = $this->flySystemManager->connection('avatar');
        $response = $spacesConnection->put($name, $fileContent, [
            'visibility' => 'public'
        ]);

        if ($response) {
            /** @var AwsS3Adapter $adapter */
            $adapter = $spacesConnection->getAdapter();

            $userAvatar->aws_key = $name;
            $userAvatar->aws_bucket = $adapter->getBucket();
            $userAvatar->save();
        }

        return $response;
    }

    /**
     * @param UserAvatar $userAvatar
     *
     * @return bool
     *
     * @throws \League\Flysystem\FileNotFoundException
     */
    public function removeUploadedAvatar(UserAvatar $userAvatar)
    {
        /** @var Filesystem $spacesConnection */
        $spacesConnection = $this->flySystemManager->connection('avatar');
        $response = $spacesConnection->delete(
            $userAvatar->aws_key
        );

        return $response;
    }
}
