<?php

namespace App\Traits;

use App\Models\Image;
use App\Models\ImageSetting;
use App\Services\Image\ImageService;
use App\Services\UploadedImageService;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\File;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Str;

trait HasImages
{
    public function imageUpload(UploadedFile $file, Model $model,  String $key = null)
    {
        $image_service = new ImageService();
        $uploadedImageService = new UploadedImageService($image_service);

        return $uploadedImageService
            ->setKey($key)
            ->setFile($file)
            ->setRelatedModel($model)
            ->move()
            ->createThumbnails($key)
            ->storeRelationship();
    }

    public function imageUpdate(UploadedFile $file, Model $model, String $key = null)
    {
        $image_service = new ImageService();
        $uploadedImageService = new UploadedImageService($image_service);

        return $uploadedImageService
            ->setKey($key)
            ->setFile($file)
            ->setRelatedModel($model)
            ->move()
            ->createThumbnails($key)
            ->replaceFirst();
    }

    private function getThumbnail($key = null, $type = 'large',  $nullable = true)
    {
        $image = Image::where('imageable_type', get_class($this))
            ->where('key', $key)
            ->where('imageable_id', $this->id)
            ->latest()
            ->first();

        $settings = ImageSetting::where('type', get_class($this))
            ->latest()
            ->first();

        if ($image && $settings)
            return asset('storage/' . $settings->upload_to . '/' . $image->name . ($type !== 'full' ? '@' . $type : '') . '.' . $image->ext);
        else if (!$nullable)
            return 'https://ui-avatars.com/api/?background=random&size=500&name=' . urlencode($this->titulo);
    }
}
