<?php

namespace App\Models;

use App\Enums\Rubrique;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Support\Str;

class Article extends Model
{
    protected $fillable = [
        'user_id', 'titre', 'auteur_nom', 'slug', 'rubrique', 'extrait',
        'contenu', 'image', 'publie', 'publie_le', 'vues',
    ];

    protected function casts(): array
    {
        return [
            'rubrique' => Rubrique::class,
            'publie' => 'boolean',
            'publie_le' => 'datetime',
        ];
    }

    protected static function booted(): void
    {
        static::saving(function (Article $article) {
            // Génère un slug automatiquement à partir du titre
            if (empty($article->slug)) {
                $article->slug = Str::slug($article->titre).'-'.Str::lower(Str::random(5));
            }
            // Pose la date de publication au moment où l'article devient publié
            if ($article->publie && empty($article->publie_le)) {
                $article->publie_le = now();
            }
        });
    }

    public function auteur(): BelongsTo
    {
        return $this->belongsTo(User::class, 'user_id');
    }

    public function getRouteKeyName(): string
    {
        return 'slug';
    }
}