<?php

namespace App\Traits;

use App\Models\ContentElement;
use App\Utilities\PageLink;
use Illuminate\Support\Str;

trait ContentElementTrait
{
    abstract public function saveContent(array $input, $id = null);
    abstract public function appendAttributes();
    abstract public function photos();

    public function getHeaderRankMultiplierAttribute()
    {
        return 25;
    }

    public function getBodyRankMultiplierAttribute()
    {
        return 0.5;
    }

    public function contentElement()
    {
        return $this->morphOne(ContentElement::class, 'content');
    }

    public function getAnchorFieldAttribute()
    {
        return $this->header ?? Str::lower(class_basename($this)).'-'.$this->id;
    }

    public function convertAttributeLinks($value, $name) 
    {
        if ((!editing() || request('preview')) && $value) {
            return cache()->tags([cache_name($this)])->rememberForever(cache_name($this).'-'.$name.'-converted-links'.(request('preview') ? '-preview' : ''), function() use($value) {
                return PageLink::convertLinkText($value);
            });
        } else {
            return $value;
        }
    }
}
