<?php
include_once '../Services/pdo_connection.php';
class Usuario {
    private $table_name = "usuario";
    private $id_usuario;
    private $correo;
    private $telefono;
    private $hash_contrasena;
    private $nombre_completo;
    private $activo;

    public function guardar($db) {
        $query = "INSERT INTO " . $this->table_name . " 
                    SET
                        correo = :correo,
                        telefono = :telefono,
                        hash_contrasena = :hash_contrasena,
                        nombre_completo = :nombre_completo,
                        activo = :activo";

        $stmt = $db->prepare($query);
        $stmt->bindParam(':correo', $this->correo);
        $stmt->bindParam(':telefono', $this->telefono);
        $stmt->bindParam(':hash_contrasena', $this->hash_contrasena);
        $stmt->bindParam(':nombre_completo', $this->nombre_completo);
        $stmt->bindParam(':activo', $this->activo);

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }

    public function leerUno($db) {
        // Usa 'hash_contrasena' para obtener el hash de la base de datos
        $query = "SELECT id_usuario, correo, telefono, hash_contrasena, nombre_completo, activo 
                  FROM " . $this->table_name . " 
                  WHERE id_usuario = :id_usuario
                  LIMIT 0,1";

        $stmt = $db->prepare($query);
        $stmt->bindParam(':id_usuario', $this->id_usuario);
        $stmt->execute();

        return $stmt;
    }

    public function buscarPorNombreCompleto($db, $nombre_completo) {
        $query = "SELECT * FROM " . $this->table_name . " WHERE nombre_completo = :nombre_completo LIMIT 1";
        $stmt = $db->prepare($query);
        $stmt->bindParam(':nombre_completo', $nombre_completo);
        $stmt->execute();
        return $stmt->fetch(PDO::FETCH_ASSOC);
    }
    
    public function leerTodos($db) {
        $query = "SELECT id_usuario, nombre_completo FROM " . $this->table_name . " ORDER BY nombre_completo ASC";

        $stmt = $db->prepare($query);
        $stmt->execute();
        
        return $stmt;
    }

    public function actualizar($db) {
        $query = "UPDATE " . $this->table_name . "
                  SET
                      correo = :correo,
                      telefono = :telefono,
                      nombre_completo = :nombre_completo,
                      activo = :activo";
        if (!empty($this->hash_contrasena)) {
            $query .= ", hash_contrasena = :hash_contrasena";
        }

        $query .= " WHERE id_usuario = :id_usuario";
        $stmt = $db->prepare($query);

        $stmt->bindParam(':correo', $this->correo);
        $stmt->bindParam(':telefono', $this->telefono);
        $stmt->bindParam(':nombre_completo', $this->nombre_completo);
        $stmt->bindParam(':activo', $this->activo);
        $stmt->bindParam(':id_usuario', $this->id_usuario);

        if (!empty($this->hash_contrasena)) {
            $stmt->bindParam(':hash_contrasena', $this->hash_contrasena);
        }

        if ($stmt->execute()) {
            return true;
        }
        return false;
    }
    
    // Métodos Getter y Setter (sin cambios)
    public function getIdUsuario() { return $this->id_usuario; }
    public function setIdUsuario($id_usuario) { $this->id_usuario = $id_usuario; }
    public function getCorreo() { return $this->correo; }
    public function setCorreo($correo) { $this->correo = $correo; }
    public function getTelefono() { return $this->telefono; }
    public function setTelefono($telefono) { $this->telefono = $telefono; }
    public function getHashContrasena() { return $this->hash_contrasena; }
    public function setHashContrasena($hash_contrasena) { $this->hash_contrasena = $hash_contrasena; }
    public function getNombreCompleto() { return $this->nombre_completo; }
    public function setNombreCompleto($nombre_completo) { $this->nombre_completo = $nombre_completo; }
    public function getActivo() { return $this->activo; }
    public function setActivo($activo) { $this->activo = $activo; }
    public function __toString() {
        return "Usuario [id=" . $this->id_usuario . ", correo=" . $this->correo . ", nombre=" . $this->nombre_completo . "]";
    }
}