<?php

namespace App\Models;

use App\Concerns\DeletesReplacedFileUploads;
use App\Concerns\HasTranslations;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Storage;

class Reglage extends Model
{
    use DeletesReplacedFileUploads;
    use HasTranslations;

    protected $table = 'reglage';

    protected $primaryKey = 'set_id';

    protected string $columnPrefix = 'set';

    const CREATED_AT = 'set_created_at';

    const UPDATED_AT = 'set_updated_at';

    protected $guarded = ['set_id'];

    public static function singleton(): self
    {
        return static::query()->firstOrNew([], ['set_id' => 1]);
    }

    /**
     * URL de l'image de fond du hero : les fichiers uploadés via le
     * FileUpload (disque "public") vivent dans storage/app/public et ne sont
     * accessibles que via /storage/..., contrairement au visuel par défaut
     * qui est un fichier statique du dossier public/. On vérifie l'existence
     * réelle sur le disque "public" plutôt que juste la présence d'une
     * valeur, car le champ contient par défaut le chemin du visuel statique.
     */
    public function heroImageUrl(): string
    {
        if ($this->set_hero_image && Storage::disk('public')->exists($this->set_hero_image)) {
            return Storage::disk('public')->url($this->set_hero_image);
        }

        return asset($this->set_hero_image ?? 'assets/hero-ocean.jpg');
    }

    /**
     * Titre <title> / og:title / twitter:title. Repli sur le contenu figé
     * dans SeoContent si le champ admin n'a pas encore été renseigné.
     */
    public function seoTitle(): string
    {
        return $this->trad('seo_title') ?: \App\Support\SeoContent::forHome(app()->getLocale())['title'];
    }

    /**
     * Meta description / og:description / twitter:description. Repli sur le
     * contenu figé dans SeoContent si le champ admin n'a pas encore été
     * renseigné.
     */
    public function seoDescription(): string
    {
        return $this->trad('seo_description') ?: \App\Support\SeoContent::forHome(app()->getLocale())['description'];
    }

    protected function fileUploadColumns(): array
    {
        return ['set_hero_image'];
    }
}
