<?php
session_start();
require_once 'conexao.php';

header('Content-Type: application/json');

// Verificar CSRF token
if (!isset($_SERVER['HTTP_X_CSRF_TOKEN']) || $_SERVER['HTTP_X_CSRF_TOKEN'] !== $_SESSION['csrf_token']) {
    http_response_code(403);
    echo json_encode(['success' => false, 'message' => 'Token CSRF inválido']);
    exit;
}

// Verificar método da requisição
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Método não permitido']);
    exit;
}

// Verificar se o usuário está logado e tenant_id existe na sessão
if (!isset($_SESSION['logado'], $_SESSION['usuario_id'], $_SESSION['tenant_id']) || $_SESSION['logado'] !== true) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Acesso não autorizado']);
    exit;
}

try {
    // Obter dados do POST
    $data = json_decode(file_get_contents('php://input'), true);

    if (json_last_error() !== JSON_ERROR_NONE) {
        throw new Exception('Dados inválidos');
    }

    $senhaAtual = trim($data['senhaAtual'] ?? '');
    $novaSenha = trim($data['novaSenha'] ?? '');

    // Validar dados
    if ($senhaAtual === '') {
        throw new Exception('Senha atual é obrigatória');
    }

    if ($novaSenha === '') {
        throw new Exception('Nova senha é obrigatória');
    }

    if (strlen($novaSenha) < 8) { // Aumentei para 8 caracteres, boa prática
        throw new Exception('A senha deve ter pelo menos 8 caracteres');
    }

    // Obter IDs da sessão
    $usuarioId = (int) $_SESSION['usuario_id'];
    $tenantId = (int) $_SESSION['tenant_id'];

    // Verificar se o usuário pertence ao tenant atual e obter a senha
    $sql = "SELECT senha FROM usuarios WHERE id = ? AND tenant_id = ?";
    $stmt = $conn->prepare($sql);

    if (!$stmt) {
        throw new Exception('Erro no banco de dados');
    }

    $stmt->bind_param("ii", $usuarioId, $tenantId);

    if (!$stmt->execute()) {
        throw new Exception('Erro ao verificar usuário');
    }

    $result = $stmt->get_result();
    $usuario = $result->fetch_assoc();

    if (!$usuario) {
        throw new Exception('Usuário não encontrado ou não pertence a este tenant');
    }

    if (!password_verify($senhaAtual, $usuario['senha'])) {
        throw new Exception('Senha atual incorreta');
    }

    // Atualizar a senha
    $novaSenhaHash = password_hash($novaSenha, PASSWORD_DEFAULT);
    $sql = "UPDATE usuarios SET senha = ? WHERE id = ? AND tenant_id = ?";
    $stmt = $conn->prepare($sql);

    if (!$stmt) {
        throw new Exception('Erro no banco de dados');
    }

    $stmt->bind_param("sii", $novaSenhaHash, $usuarioId, $tenantId);

    if (!$stmt->execute()) {
        throw new Exception('Erro ao atualizar senha');
    }

    echo json_encode([
        'success' => true,
        'message' => 'Senha alterada com sucesso!'
    ]);

} catch (Exception $e) {
    http_response_code(400);
    echo json_encode([
        'success' => false,
        'message' => $e->getMessage()
    ]);
} finally {
    if (isset($stmt)) {
        $stmt->close();
    }
    $conn->close();
}
?>
