<?php

namespace App\Models\Backoffice;

use App\Helpers\Backoffice\MediaHelper;
use App\Models\Backoffice\Support\BaseModel;

class MediaItem extends BaseModel
{
    const MEDIA_TYPE_IMAGE    = "image";
    const MEDIA_TYPE_VIDEO    = "video";
    const MEDIA_TYPE_DOCUMENT = "document";
    const MEDIA_TYPE_SVG      = "svg";

    protected $fillable = [
        'base_folder',
        'path',
        'filename',
        'original_filename',
        'media_folder_id',
        'title',
        'alt',
        'author',
        'extension',
        'related_type',
        'media_type',
        'backend_user_id',
        'size',
        'width',
        'height',
    ];

    protected $guarded = ['id'];

    protected static function booted()
    {
        static::saving(function (MediaItem $mediaItem) {
            $parts = [
                $mediaItem->filename,
                $mediaItem->original_filename,
                $mediaItem->title,
            ];
            // Simple example to add referenceable fields to the fulltext search field
            foreach ($mediaItem->references as $reference) {
                $referenceObject = $reference->websiteObject->objectable;
                if (!$referenceObject) {
                    continue;
                }
                $referenceItem = $referenceObject->full()->first();
                $parts[] = $referenceItem->title;
            }
            $parts = array_filter(array_map(function ($v) {
                return trim($v);
            }, $parts));
            $mediaItem->search_content = implode(' ', $parts);
        });
    }

    public function backendUser()
    {
        $this->belongsTo('BackendUser');
    }

    public function isImage()
    {
        return $this->media_type == self::MEDIA_TYPE_IMAGE;
    }

    public function isVideo()
    {
        return $this->media_type == self::MEDIA_TYPE_VIDEO;
    }

    public function isSvg()
    {
        return $this->media_type == self::MEDIA_TYPE_SVG;
    }

    public function mediaFolder()
    {
        return $this->belongsTo(MediaFolder::class, 'media_folder_id');
    }

    public function references()
    {
        return $this->hasMany(MediaItemReference::class, 'media_item_id');
    }

    public function getPublicPathAttribute()
    {
        return asset(config('path.frontend.media')) . '/' . $this->base_folder . '/' . $this->path;
    }

    public function getThumbUrlAttribute()
    {
        $thumbPath = asset(config('path.frontend.thumbs'));
        return $thumbPath . '/' . $this->base_folder . '/' . MediaHelper::getFileNameSize($this->path, '200x');
    }

    public function getOriginalUrlAttribute()
    {
        $thumbPath = asset(config('path.frontend.media'));
        return $thumbPath . '/' . $this->base_folder . '/' . $this->path;
    }
}
