<?php
class Usuario {
    private $db;

    public function __construct() {
        // Instancia a conexão com o banco de dados (classe Database deve estar implementada)
        $this->db = new Database();
    }

    // Autentica usuário pelo email e senha
    public function autenticar($email, $senha) {
        $this->db->query("SELECT * FROM usuarios WHERE email = :email LIMIT 1");
        $this->db->bind(":email", $email);
        $usuario = $this->db->single();

        if ($usuario && password_verify($senha, $usuario->senha)) {
            return $usuario;
        }

        return false;
    }

    // Cria um novo usuário, senha já é armazenada com hash
    public function criar($dados) {
        $this->db->query("INSERT INTO usuarios (nome, email, senha, criado_em) VALUES (:nome, :email, :senha, NOW())");
        $this->db->bind(":nome", $dados['nome']);
        $this->db->bind(":email", $dados['email']);
        $this->db->bind(":senha", password_hash($dados['senha'], PASSWORD_DEFAULT));
        return $this->db->execute();
    }

    // Busca usuário pelo email (ex: para verificar se já existe)
    public function buscarPorEmail($email) {
        $this->db->query("SELECT * FROM usuarios WHERE email = :email");
        $this->db->bind(":email", $email);
        return $this->db->single();
    }

    // Busca usuário pelo ID
    public function buscarPorId($id) {
        $this->db->query("SELECT * FROM usuarios WHERE id_usuario = :id LIMIT 1");
        $this->db->bind(":id", $id);
        return $this->db->single();
    }

    // Atualiza dados do usuário (nome e email)
    public function atualizar($dados) {
        $this->db->query("UPDATE usuarios SET nome = :nome, email = :email, alterado = NOW() WHERE id_usuario = :id");
        $this->db->bind(":nome", $dados['nome']);
        $this->db->bind(":email", $dados['email']);
        $this->db->bind(":id", $dados['id']);
        return $this->db->execute();
    }

    // Lista todos os usuários (exemplo para listagem)
    public function todos() {
        $this->db->query("SELECT * FROM usuarios ORDER BY nome");
        return $this->db->resultSet();
    }

   public function verificarToken($token) {
    $this->db->query("SELECT * FROM usuarios WHERE token_recuperacao = :token LIMIT 1");
    $this->db->bind(":token", $token);
    return $this->db->resultado();
}

public function atualizarSenhaComToken($token, $novaSenha) {
    $this->db->query("UPDATE usuarios 
                      SET senha = :senha, token_recuperacao = NULL 
                      WHERE token_recuperacao = :token");
    $this->db->bind(":senha", $novaSenha);
    $this->db->bind(":token", $token);
    return $this->db->executa();
}

public function atualizarTokenRecuperacao($id, $token) {
    $sql = "UPDATE usuarios SET token_recuperacao = :token WHERE id_usuario = :id";
    $query = $this->db->query($sql);
    $query->bindValue(':token', $token, PDO::PARAM_STR);
    $query->bindValue(':id', $id, PDO::PARAM_INT);
    return $query->execute();
}

public function listarTodos()
{
    $this->db->query("SELECT * FROM usuarios WHERE removido IS NULL ORDER BY nome");
    return $this->db->resultados();
}


}
