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

// Define o tipo da resposta como JSON
header('Content-Type: application/json');

// REMOVIDO: Verificação de requisição AJAX muito restritiva
// Isso estava bloqueando requisições normais do fetch()
// if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest') {
//     echo json_encode(['success' => false, 'message' => 'Acesso não permitido']);
//     exit();
// }

// CORREÇÃO: Verificar o método de requisição
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['success' => false, 'message' => 'Método não permitido']);
    exit();
}

// CORREÇÃO: Obter dados do POST de forma compatível com FormData
// O JavaScript está enviando via FormData, não JSON
$clienteId = $_POST['id'] ?? null;
$csrfToken = $_POST['csrf_token'] ?? null;

// Verificar dados necessários
if (!$clienteId || !$csrfToken) {
    echo json_encode(['success' => false, 'message' => 'Dados incompletos']);
    exit();
}

// Verifica se o usuário está logado e tem permissão
if (!isset($_SESSION['logado'], $_SESSION['usuario_id'], $_SESSION['tenant_id']) || $_SESSION['logado'] !== true) {
    echo json_encode(['success' => false, 'message' => 'Usuário não logado']);
    exit();
}

// Verifica o token CSRF
if (!isset($_SESSION['csrf_token']) || $csrfToken !== $_SESSION['csrf_token']) {
    echo json_encode(['success' => false, 'message' => 'Token CSRF inválido']);
    exit();
}

// Verifica se o ID do cliente é válido
if (!is_numeric($clienteId)) {
    echo json_encode(['success' => false, 'message' => 'ID inválido']);
    exit();
}

$clienteId = (int)$clienteId;
$tenantId = (int)$_SESSION['tenant_id'];
$usuarioId = (int)$_SESSION['usuario_id'];
$permissao = $_SESSION['permissao'] ?? 'usuario';

try {
    // VERIFICAÇÃO DE PERMISSÃO SIMPLIFICADA
    // Primeiro verifica se o cliente existe e pertence ao tenant
    $sqlVerifica = "SELECT * FROM clientes WHERE id = ? AND tenant_id = ?";
    $stmtVerifica = $conn->prepare($sqlVerifica);
    
    if (!$stmtVerifica) {
        throw new Exception('Erro na preparação da consulta: ' . $conn->error);
    }
    
    $stmtVerifica->bind_param("ii", $clienteId, $tenantId);
    $stmtVerifica->execute();
    $result = $stmtVerifica->get_result();
    
    if ($result->num_rows === 0) {
        echo json_encode(['success' => false, 'message' => 'Cliente não encontrado ou não pertence à sua empresa']);
        $stmtVerifica->close();
        exit();
    }
    
    $cliente = $result->fetch_assoc();
    $stmtVerifica->close();
    
    // VERIFICAÇÃO DE PERMISSÃO PARA EXCLUSÃO
    $podeExcluir = false;
    
    // Admin e Super Admin podem excluir qualquer cliente
    if ($permissao === 'admin' || $permissao === 'super_admin') {
        $podeExcluir = true;
    } 
    // Usuários comuns: verificar se podem ver todos os clientes ou são responsáveis
    else {
        // Verificar se usuário tem permissão para ver todos os clientes
        $stmtPerm = $conn->prepare("SELECT ver_todos_clientes FROM usuarios WHERE id = ?");
        $stmtPerm->bind_param("i", $usuarioId);
        $stmtPerm->execute();
        $resultPerm = $stmtPerm->get_result();
        $linhaPerm = $resultPerm->fetch_assoc();
        $verTodosClientes = isset($linhaPerm['ver_todos_clientes']) ? (int)$linhaPerm['ver_todos_clientes'] : 0;
        $stmtPerm->close();
        
        // Se pode ver todos os clientes OU é o responsável pelo cliente, pode excluir
        if ($verTodosClientes === 1 || (isset($cliente['responsavel']) && $cliente['responsavel'] == $usuarioId)) {
            $podeExcluir = true;
        }
    }
    
    if (!$podeExcluir) {
        echo json_encode(['success' => false, 'message' => 'Acesso não permitido para excluir este cliente']);
        exit();
    }

    // Inicia transação para garantir integridade dos dados
    $conn->begin_transaction();

    // 1. Remove as permissões específicas do usuário para este cliente (se existir a tabela)
    $tabelaPermissoesExiste = false;
    $result = $conn->query("SHOW TABLES LIKE 'permissoes_clientes'");
    if ($result && $result->num_rows > 0) {
        $tabelaPermissoesExiste = true;
        $sqlPermissoes = "DELETE FROM permissoes_clientes WHERE cliente_id = ?";
        $stmtPermissoes = $conn->prepare($sqlPermissoes);
        if ($stmtPermissoes) {
            $stmtPermissoes->bind_param("i", $clienteId);
            $stmtPermissoes->execute();
            $stmtPermissoes->close();
        }
    }

    // 2. Remove as atividades relacionadas ao cliente (se existir a tabela)
    $tabelaAtividadesExiste = false;
    $result = $conn->query("SHOW TABLES LIKE 'atividades'");
    if ($result && $result->num_rows > 0) {
        $tabelaAtividadesExiste = true;
        $sqlAtividades = "DELETE FROM atividades WHERE cliente_id = ?";
        $stmtAtividades = $conn->prepare($sqlAtividades);
        if ($stmtAtividades) {
            $stmtAtividades->bind_param("i", $clienteId);
            $stmtAtividades->execute();
            $stmtAtividades->close();
        }
    }

    // 3. Finalmente remove o cliente
    $sqlCliente = "DELETE FROM clientes WHERE id = ? AND tenant_id = ?";
    $stmtCliente = $conn->prepare($sqlCliente);
    
    if (!$stmtCliente) {
        throw new Exception('Erro na preparação da exclusão: ' . $conn->error);
    }
    
    $stmtCliente->bind_param("ii", $clienteId, $tenantId);
    $stmtCliente->execute();
    
    if ($stmtCliente->affected_rows === 0) {
        throw new Exception('Nenhum cliente foi excluído');
    }
    
    $stmtCliente->close();
    
    // Confirma a transação
    $conn->commit();
    
    // Registrar log da exclusão
    registrarLog('Exclusão de cliente', "Cliente ID: $clienteId, Nome: " . ($cliente['Nome_Cliente'] ?? '') . ", Tenant ID: $tenantId, Usuário: $usuarioId");
    
    echo json_encode([
        'success' => true, 
        'message' => 'Cliente excluído com sucesso'
    ]);
    
} catch (Exception $e) {
    // Desfaz todas as alterações em caso de erro
    if (isset($conn) && $conn) {
        $conn->rollback();
    }
    
    echo json_encode([
        'success' => false, 
        'message' => 'Erro ao excluir o cliente: ' . $e->getMessage()
    ]);
} finally {
    if (isset($conn) && $conn) {
        $conn->close();
    }
}

exit();

// Função de log melhorada
function registrarLog($acao, $detalhes = '') {
    $diretorioLogs = 'logs';
    $arquivoLog = $diretorioLogs . '/cliente_acoes.log';
    $dataHora = date('Y-m-d H:i:s');
    $usuario = $_SESSION['usuario_id'] ?? 'Sistema';
    $ip = $_SERVER['REMOTE_ADDR'] ?? 'IP desconhecido';
    
    $mensagem = sprintf(
        "[%s] [Usuário: %s] [IP: %s] [Ação: %s] %s\n",
        $dataHora,
        $usuario,
        $ip,
        $acao,
        $detalhes
    );

    if (!file_exists($diretorioLogs)) {
        mkdir($diretorioLogs, 0755, true);
    }
    
    file_put_contents($arquivoLog, $mensagem, FILE_APPEND | LOCK_EX);
}