<?php

/**
 * Created by Reliese Model.
 */

namespace App\Models;

use AlAminFirdows\LaravelEditorJs\Facades\LaravelEditorJs;
use Carbon\Carbon;
use Illuminate\Database\Eloquent\Collection;
use Illuminate\Database\Eloquent\Model;
use Spatie\Feed\Feedable;
use Spatie\Feed\FeedItem;

/**
 * Class Post
 *
 * @property int $id
 * @property string|null $title
 * @property string|null $slug
 * @property string|null $excerpt
 * @property int|null $author_id
 * @property string $featured_image
 * @property string $editor
 * @property array|null $body
 * @property string $post_format
 * @property int $comment_count
 * @property int $likes_count
 * @property string $status
 * @property Carbon|null $created_at
 * @property Carbon|null $updated_at
 * @property Author|null $author
 * @property Collection|PostCategory[] $post_categories
 */
class Post extends Model implements Feedable
{
    protected $table = 'posts';

    protected $casts = [
        'author_id' => 'int',
        'body' => 'json',
        'comment_count' => 'int',
        'likes_count' => 'int',
        'featured' => 'bool',
        'publish_date' => 'datetime',
    ];

    protected $fillable = [
        'title',
        'slug',
        'excerpt',
        'author_id',
        'featured_image',
        'editor',
        'body',
        'post_format',
        'comment_count',
        'likes_count',
        'status',
        'featured',
        'publish_date',
    ];

    protected $appends = [
        //'html_body',
    ];

    public function author()
    {
        return $this->belongsTo(Author::class);
    }

    public function post_categories()
    {
        return $this->hasMany(PostCategory::class);
    }

    public function post_category()
    {
        return $this->hasOne(PostCategory::class);
    }

    public function getHtmlBodyAttribute()
    {
        if (! is_empty($this->body)) {
            return LaravelEditorJs::render(json_encode($this->body));
        }

        return '';

    }

    public function getFeaturedImageLqipAttribute()
    {
        $featuredImage = $this->featured_image;

        // Get the extension of the original featured image
        $extension = pathinfo($featuredImage, PATHINFO_EXTENSION);

        // Append "_lqip" before the extension to create the LQIP image URL
        return str_replace(".{$extension}", "_lqip.{$extension}", $featuredImage);
    }

    public function toFeedItem(): FeedItem
    {
        return FeedItem::create()
            ->id($this->id)
            ->title($this->title)
            ->summary($this->excerpt)
            ->updated($this->publish_date)
            ->link(route('home.country.post', ['country' => $this->post_category?->category?->country_locale_slug, 'post_slug' => $this->slug]))
            ->authorName($this->author->name);
    }

    public static function getFeedItems()
    {
        return Post::where('status', 'publish')->latest()->get();
    }
}
