<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable; // <-- ¡MUY IMPORTANTE!
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable // <-- Asegúrate que extienda de Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable;

    // Define el nombre de tu tabla de usuarios
    protected $table = 'user'; 

    // Define el nombre de tu clave primaria
    protected $primaryKey = 'id_user'; 

    // Indica si tu tabla usa las marcas de tiempo (created_at, updated_at)
    public $timestamps = true; 

    // Campos que pueden ser asignados masivamente
    protected $fillable = [
        'alias',
        'pass_hash', // Aquí se guarda la contraseña hasheada
        'email',
        'rol',       // Para diferenciar entre 'admin' y 'basic'
        'token',     // Tu campo 'token'
        'nom_ape',   // Tu campo 'nombre_apellido'
        'cel_user',  // Tu campo 'celular_usuario'
    ];

    // Campos que deben ser ocultados al serializar el modelo (ej. a JSON)
    protected $hidden = [
        'pass_hash',        // La contraseña hasheada no debe mostrarse públicamente
        'remember_token',   // Usado por Laravel para la funcionalidad "recordarme"
    ];

    // Casteo de tipos de datos para atributos específicos
    protected $casts = [
        'email_verified_at' => 'datetime', // Si usas verificación de correo
        'token' => 'int',                  // Asegura que 'token' sea tratado como entero
    ];

    /**
     * Sobreescribe el método por defecto de Laravel para obtener la contraseña.
     * Laravel busca por defecto una columna 'password', pero tu usas 'pass_hash'.
     *
     * @return string
     */
    public function getAuthPassword()
    {
        return $this->pass_hash;
    }

    /**
     * Sobreescribe el método por defecto de Laravel para obtener el nombre
     * del identificador único del usuario (la clave primaria).
     * Laravel busca por defecto 'id', pero tu usas 'id_user'.
     *
     * @return string
     */
    public function getAuthIdentifierName()
    {
        return $this->primaryKey; // Devuelve 'id_user'
    }

    // Si tienes relaciones con otros modelos, irían aquí.
    // Por ejemplo:
    /*
    public function titulos()
    {
        return $this->hasMany(Ugel::class, 'id_usuario', 'id_user');
    }
    */
}