<?php

namespace App\Models;

use App\Enums\StatutAnnonce;
use App\Enums\TypeAnnonce;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\BelongsTo;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Illuminate\Database\Eloquent\Relations\HasOne;

class Annonce extends Model
{
    protected $fillable = [
        'user_id', 'auteur_nom', 'image_couverture', 'type', 'titre', 'description', 'localisation',
        'contact_nom', 'contact_telephone', 'contact_email',
        'statut', 'frais', 'paiement_reference', 'paiement_confirme_le',
        'publiee_le', 'expire_le', 'vues', 'likes',
    ];

    public function getCouvertureAttribute(): ?string
    {
        return $this->image_couverture ?: $this->images->first()?->chemin;
    }

    protected function casts(): array
    {
        return [
            'type' => TypeAnnonce::class,
            'statut' => StatutAnnonce::class,
            'frais' => 'decimal:2',
            'paiement_confirme_le' => 'datetime',
            'publiee_le' => 'datetime',
            'expire_le' => 'datetime',
        ];
    }

    /** L'auteur de l'annonce. */
    public function user(): BelongsTo
    {
        return $this->belongsTo(User::class);
    }

    /** Les images (jusqu'à 10), dans l'ordre. */
    public function images(): HasMany
    {
        return $this->hasMany(AnnonceImage::class)->orderBy('ordre');
    }

    /** Les détails propres à chaque type (un seul est rempli selon le type). */
    public function marketplaceDetail(): HasOne
    {
        return $this->hasOne(MarketplaceDetail::class);
    }

    public function evenementDetail(): HasOne
    {
        return $this->hasOne(EvenementDetail::class);
    }

    public function emploiDetail(): HasOne
    {
        return $this->hasOne(EmploiDetail::class);
    }

    public function annuaireDetail(): HasOne
    {
        return $this->hasOne(AnnuaireDetail::class);
    }
public function livreDetail(): \Illuminate\Database\Eloquent\Relations\HasOne
    {
        return $this->hasOne(LivreDetail::class);
    }
}