<?php

namespace App\PackagesApi\v4\Controllers\Capsule;

use App\Http\Controllers\Controller;
use App\Packages\Capsule\Models\Capsule;
use App\Packages\v4\Capsule\Repository\CapsuleRepository;
use App\Packages\v4\Capsule\Services\CapsuleCreateService;
use App\Packages\v4\Capsule\Services\CapsuleFactoryService;
use App\Packages\v4\Capsule\Services\ImageFactoryService;
use App\Packages\v4\Capsule\Transformer\CapsuleArrayTransformer;
use App\Packages\User\Models\User;
use App\Packages\User\Service\UserMentionService;
use App\PackagesApi\v4\Requests\Capsule\UpdateRequest;
use App\PackagesApi\v4\Requests\Capsule\UploadPreviewRequest;
use Illuminate\Contracts\Container\BindingResolutionException;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;

/**
 * Class UpdateController
 * @package App\PackagesApi\Controllers\v4\Capsule
 */
class UpdateController extends Controller
{
    /** @var Capsule */
    private $capsule;
    /** @var User */
    private $user;

    public function __construct(Request $request)
    {
        $capsule = CapsuleRepository::init()->firstByUuid($request->get('capsule_id'));

        $this->capsule = $capsule;
        $this->user = user();
    }

    /**
     * @param UpdateRequest $request
     * @return JsonResponse
     * @throws BindingResolutionException
     */
    public function update(UpdateRequest $request)
    {
        if ( $this->capsule->user_id != $this->user->id )
            return jsonErrorMessage('You can update only your own capsule');

        $this->user->saveAccess('Update capsule');

        /** @var CapsuleFactoryService $createService */
        $updateService = app()->make(CapsuleFactoryService::class);
        $updateService->update($this->capsule, $request);

        UserMentionService::processCapsuleCaption($this->capsule);

        return jsonSuccess([
            'capsule' => CapsuleArrayTransformer::mainCapsule($this->capsule, $this->user),
        ]);
    }

    public function uploadPreview(Request $request, ImageFactoryService $imageService)
    {
        $imageService->removeAllImages($this->capsule);
    }

    /**
     * @param UploadPreviewRequest $request
     * @param $imageService $imageService
     *
     * @return JsonResponse
     */
    /*
    public function uploadPreview(UploadPreviewRequest $request, ImageFactoryService $imageService)
    {
        set_time_limit(180);
        ini_set('memory_limit', '712M');

        if ( $this->capsule->user_id != $this->user->id )
            return jsonErrorMessage('You can update only your own capsule');

        $this->user->saveAccess('Upload preview to capsule');

        $imageService->removeAllImages($this->capsule);

        $imageService->uploadAllImages($this->capsule, $request);

        return jsonSuccess([
            'capsule' => CapsuleArrayTransformer::mainCapsule($this->capsule, $this->user),
        ]);
    }*/
}
