<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class Utilisateur extends Authenticatable
{
    use Notifiable;

    // Nom de la table
    protected $table = 'utilisateurs';
    
    // Clé primaire personnalisée
    protected $primaryKey = 'ID_Utilisateur';
    public $incrementing = true;
    protected $keyType = 'int';

    // Colonnes modifiables (Mass Assignment)
    protected $fillable = [
        'Email',
        'MotDePasse',
        'Pseudo',
        'Statut',
        'ID_Role',
        'DateInscription',
    ];

    // Données sensibles à cacher
    protected $hidden = [
        'MotDePasse',
    ];

    // Casts des attributs
    protected $casts = [
        'MotDePasse' => 'hashed',
        'DateInscription' => 'datetime',
    ];

    // Utiliser Email comme authentifiant
    public function getAuthIdentifierName()
    {
        return 'Email';
    }

    // Relation avec Role
    public function role()
    {
        return $this->belongsTo(Role::class, 'ID_Role', 'ID_Role');
    }

    // Relation avec Ressources créées
    public function ressourcesCreees()
    {
        return $this->hasMany(Ressource::class, 'ID_Utilisateur_Createur', 'ID_Utilisateur');
    }

    // Relation avec Commentaires
    public function commentaires()
    {
        return $this->hasMany(Commentaire::class, 'ID_Utilisateur', 'ID_Utilisateur');
    }

    // Relation avec Activites hôtées
    public function activitesHotees()
    {
        return $this->hasMany(Activite::class, 'ID_Utilisateur_Hote', 'ID_Utilisateur');
    }

    // Relation avec Progressions
    public function progressions()
    {
        return $this->hasMany(Utilisateur_Progression::class, 'ID_Utilisateur', 'ID_Utilisateur');
    }
}