<?php
session_start();

// Verificar se o usuário está logado
if (!isset($_SESSION['logado']) || $_SESSION['logado'] !== true) {
    header('Location: login.php');
    exit;
}

// Verificar tenant_id
$tenant_id = $_SESSION['tenant_id'] ?? null;
if (!$tenant_id) {
    die("Tenant não identificado.");
}

// Verificar permissões do usuário atual
$usuario_id = $_SESSION['usuario_id'] ?? null;
$permissao = $_SESSION['permissao'] ?? 'usuario';
$is_admin = ($permissao === 'admin');

// CSRF token
if (!isset($_SESSION['csrf_token'])) {
    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}

require_once 'conexao.php';

// ========== FUNÇÕES DE CONTROLE DE ACESSO ========== //

function usuarioPodeVisualizarFunil($conn, $usuario_id, $funil_id) {
    global $is_admin;
    if ($is_admin) return true;
    
    $stmt = $conn->prepare("SELECT 1 FROM permissoes_funis WHERE usuario_id = ? AND funil_id = ? AND visualizar = 1");
    $stmt->bind_param("ii", $usuario_id, $funil_id);
    $stmt->execute();
    return $stmt->get_result()->num_rows > 0;
}

$clienteId = (int)$_GET['id'];

// Busca os dados do cliente com verificação de tenant_id
$sql = "SELECT * FROM clientes WHERE id = ? AND tenant_id = ?";
$stmt = $conn->prepare($sql);
$stmt->bind_param("ii", $clienteId, $tenant_id);
$stmt->execute();
$resultado = $stmt->get_result();

if ($resultado->num_rows === 0) {
    header('Location: lista_clientes.php?erro=cliente_nao_encontrado');
    exit;
}

$cliente = $resultado->fetch_assoc();
$stmt->close();

// Buscar logs do cliente com tenant_id
$sqlLogs = "SELECT * FROM cliente_logs WHERE cliente_id = ? AND tenant_id = ? ORDER BY id DESC";
$stmtLogs = $conn->prepare($sqlLogs);
$stmtLogs->bind_param("is", $clienteId, $tenant_id);
$stmtLogs->execute();
$resultadoLogs = $stmtLogs->get_result();
$logs = $resultadoLogs->fetch_all(MYSQLI_ASSOC);
$stmtLogs->close();

// Buscar produtos do cliente com tenant_id
$sqlProdutos = "SELECT cp.*, lp.nome as nome_original, lp.descricao as descricao_original 
               FROM cliente_produtos cp
               LEFT JOIN lista_produtos lp ON cp.lista_produto_id = lp.id
               WHERE cp.cliente_id = ? AND cp.tenant_id = ?
               ORDER BY cp.data_cadastro DESC";
$stmtProdutos = $conn->prepare($sqlProdutos);
$stmtProdutos->bind_param("is", $clienteId, $tenant_id);
$stmtProdutos->execute();
$resultadoProdutos = $stmtProdutos->get_result();
$produtos = $resultadoProdutos->fetch_all(MYSQLI_ASSOC);
$stmtProdutos->close();

// Buscar atividades do cliente com tenant_id
$filtroStatus = $_GET['status'] ?? 'todos';

$sqlAtividades = "SELECT *, 
                 CASE 
                   WHEN concluida = 1 THEN 'concluida'
                   WHEN data_agendada < NOW() THEN 'atrasada'
                   ELSE 'pendente'
                 END AS status
                 FROM atividades 
                 WHERE cliente_id = ? AND tenant_id = ?";

if ($filtroStatus !== 'todos') {
    if ($filtroStatus === 'concluida') {
        $sqlAtividades .= " AND concluida = 1";
    } elseif ($filtroStatus === 'pendente') {
        $sqlAtividades .= " AND concluida = 0 AND data_agendada >= NOW()";
    } elseif ($filtroStatus === 'atrasada') {
        $sqlAtividades .= " AND concluida = 0 AND data_agendada < NOW()";
    }
}

$sqlAtividades .= " ORDER BY data_agendada ASC";

$stmtAtividades = $conn->prepare($sqlAtividades);
$stmtAtividades->bind_param("ii", $clienteId, $tenant_id);
$stmtAtividades->execute();
$resultadoAtividades = $stmtAtividades->get_result();
$atividades = $resultadoAtividades->fetch_all(MYSQLI_ASSOC);
$stmtAtividades->close();

// Buscar arquivos do cliente
$sqlArquivos = "SELECT * FROM cliente_arquivos WHERE cliente_id = ? ORDER BY data_upload DESC";
$stmtArquivos = $conn->prepare($sqlArquivos);
$stmtArquivos->bind_param("i", $clienteId);
$stmtArquivos->execute();
$resultadoArquivos = $stmtArquivos->get_result();
$arquivos = $resultadoArquivos->fetch_all(MYSQLI_ASSOC);
$stmtArquivos->close();

// Buscar lista de atividades padrão com tenant_id
$listaAtividades = [];
$sqlListaAtividades = "SELECT * FROM lista_atividades WHERE ativo = 1 AND tenant_id = ? ORDER BY nome";
$stmtListaAtividades = $conn->prepare($sqlListaAtividades);
$stmtListaAtividades->bind_param("i", $tenant_id);
$stmtListaAtividades->execute();
$resultadoListaAtividades = $stmtListaAtividades->get_result();
if ($resultadoListaAtividades) {
    $listaAtividades = $resultadoListaAtividades->fetch_all(MYSQLI_ASSOC);
}
$stmtListaAtividades->close();

// Calcular valor total de todos os produtos e quantidade total
$valorTotalProdutos = 0;
$quantidadeTotalProdutos = 0;
foreach ($produtos as $produto) {
    $valorTotalProdutos += $produto['valor'];
    $quantidadeTotalProdutos += $produto['quantidade'];
}

// Buscar lista de produtos disponíveis com tenant_id
$listaProdutos = [];
$sqlListaProdutos = "SELECT * FROM lista_produtos WHERE ativo = 1 AND tenant_id = ? ORDER BY nome";
$stmtListaProdutos = $conn->prepare($sqlListaProdutos);
$stmtListaProdutos->bind_param("s", $tenant_id);
$stmtListaProdutos->execute();
$resultadoListaProdutos = $stmtListaProdutos->get_result();
if ($resultadoListaProdutos) {
    $listaProdutos = $resultadoListaProdutos->fetch_all(MYSQLI_ASSOC);
}
$stmtListaProdutos->close();

$campos = [
    'Nome_Cliente', 'Email', 'Telefone', 'Telefone2','Endereco', 'Cidade', 'Estado',
    'CEP', 'Bairro', 'Complemento', 'instagram', 'Linkedin','Observacoes', 
];

// Buscar formulários disponíveis
$formularios = [];
$query = "SELECT id, nome, criado_em FROM formularios WHERE tenant_id = ? ORDER BY criado_em DESC";
$stmt = $conn->prepare($query);
if ($stmt) {
    $stmt->bind_param("i", $tenant_id);
    $stmt->execute();
    $result = $stmt->get_result();
    $formularios = $result->fetch_all(MYSQLI_ASSOC);
    $stmt->close();
}

// Buscar respostas de formulários para este cliente
$sqlRespostas = "SELECT rf.id, f.nome as formulario_nome, rf.data_resposta 
                FROM respostas_formulario rf
                JOIN formularios f ON rf.formulario_id = f.id
                WHERE rf.cliente_id = ?";
$stmtRespostas = $conn->prepare($sqlRespostas);
$stmtRespostas->bind_param("i", $clienteId);
$stmtRespostas->execute();
$resultadoRespostas = $stmtRespostas->get_result();
$respostas = $resultadoRespostas->fetch_all(MYSQLI_ASSOC);
$stmtRespostas->close();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Verifica se é para enviar formulário por e-mail
    if (isset($_POST['enviar_formulario_email'])) {
        // Verificar CSRF token
        if (!isset($_POST['csrf_token']) || $_POST['csrf_token'] !== $_SESSION['csrf_token']) {
            $_SESSION['mensagem'] = "Token de segurança inválido!";
            header("Location: editar_cliente.php?id=$clienteId");
            exit;
        }

        $formulario_id = (int)$_POST['formulario_email_id'];
        $email_cliente = trim($_POST['email_cliente']);
        $mensagem_personalizada = trim($_POST['mensagem_email'] ?? '');

        // Verificar se o e-mail do cliente é válido
        if (empty($email_cliente) || !filter_var($email_cliente, FILTER_VALIDATE_EMAIL)) {
            $_SESSION['mensagem'] = "E-mail do cliente inválido ou não informado!";
            header("Location: editar_cliente.php?id=$clienteId#formularios");
            exit;
        }

        // Verificar se o formulário existe e pegar o nome do tenant
        $sqlVerifica = "SELECT f.*, t.nome AS nome_empresa 
                       FROM formularios f
                       JOIN tenants t ON f.tenant_id = t.id
                       WHERE f.id = ? AND f.tenant_id = ?";
        $stmtVerifica = $conn->prepare($sqlVerifica);
        $stmtVerifica->bind_param("ii", $formulario_id, $tenant_id);
        $stmtVerifica->execute();
        $formulario = $stmtVerifica->get_result()->fetch_assoc();
        $stmtVerifica->close();

        if (!$formulario) {
            $_SESSION['mensagem'] = "Formulário selecionado não encontrado!";
            header("Location: editar_cliente.php?id=$clienteId#formularios");
            exit;
        }

        // Generate unique token
        $token = bin2hex(random_bytes(16));

        // Insert token for tracking
        $sqlInsert = "INSERT INTO envios_formulario (cliente_id, formulario_id, token, data_envio, tenant_id) 
                     VALUES (?, ?, ?, NOW(), ?)";
        $stmtInsert = $conn->prepare($sqlInsert);
        $stmtInsert->bind_param("iisi", $clienteId, $formulario_id, $token, $tenant_id);
        
        if ($stmtInsert->execute()) {
            // Create the form link with token
            $link = "https://".$_SERVER['HTTP_HOST']."/formulario_responder.php?cliente_id=".$clienteId."&formulario_id=".$formulario_id."&token=".$token;
            
            // Prepare email message
            $assunto = "Preenchimento de Formulário: ".htmlspecialchars($formulario['nome']);
            $mensagem = "Olá ".htmlspecialchars($cliente['Nome_Cliente']).",\n\n";
            $mensagem .= !empty($mensagem_personalizada) ? $mensagem_personalizada."\n\n" : "Por favor, preencha o formulário no link abaixo:\n";
            $mensagem .= $link."\n\nAtenciosamente,\n".$formulario['nome_empresa'];
            
            // Send email
            $headers = "From: ".$_SESSION['email_usuario']."\r\n";
            $headers .= "Reply-To: ".$_SESSION['email_usuario']."\r\n";
            $headers .= "Content-Type: text/plain; charset=UTF-8\r\n";
            
            if (mail($email_cliente, $assunto, $mensagem, $headers)) {
                $_SESSION['mensagem'] = "Formulário enviado com sucesso para o e-mail do cliente!";
                
                // Log the action
                $usuarioId = $_SESSION['usuario_id'] ?? 0;
                $nomeUsuario = $_SESSION['usuario_nome'] ?? 'Sistema';
                $detalhes = "Formulário enviado por e-mail:\n";
                $detalhes .= "- Formulário: ".htmlspecialchars($formulario['nome'])."\n";
                $detalhes .= "- E-mail: $email_cliente\n";
                $detalhes .= "- Link: $link";
                
                $sqlLog = "INSERT INTO cliente_logs (cliente_id, usuario_id, nome_usuario, acao, detalhes, tenant_id)
                           VALUES (?, ?, ?, 'envio_formulario', ?, ?)";
                $stmtLog = $conn->prepare($sqlLog);
                $stmtLog->bind_param("iisss", $clienteId, $usuarioId, $nomeUsuario, $detalhes, $tenant_id);
                $stmtLog->execute();
                $stmtLog->close();
            } else {
                $_SESSION['mensagem'] = "Formulário registrado, mas houve um erro ao enviar o e-mail.";
            }
            
            header("Location: editar_cliente.php?id=$clienteId#formularios");
            exit;
        } else {
            $_SESSION['mensagem'] = "Erro ao registrar envio do formulário: ".$conn->error;
            header("Location: editar_cliente.php?id=$clienteId#formularios");
            exit;
        }
    }
    // Outros métodos POST permanecem os mesmos...
}

// Funções auxiliares para formatação de datas
function formatarData($data) {
    if (!empty($data) && $data !== '0000-00-00 00:00:00') {
        try {
            $dt = new DateTime($data, new DateTimeZone('America/Sao_Paulo'));
            return $dt->format('d/m/Y H:i');
        } catch (Exception $e) {
            return '';
        }
    }
    return '';
}

function dataParaISO($data) {
    if (empty($data) || $data === '0000-00-00 00:00:00') return null;
    try {
        $dt = new DateTime($data, new DateTimeZone('America/Sao_Paulo'));
        return $dt->format('Y-m-d\TH:i:s');
    } catch (Exception $e) {
        return null;
    }
}
?>

<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Editar Cliente</title>
    <style>
        .mensagem {
            padding: 10px;
            margin: 10px 0;
            border-radius: 4px;
        }
        .sucesso {
            background-color: #d4edda;
            color: #155724;
        }
        .erro {
            background-color: #f8d7da;
            color: #721c24;
        }
    </style>
</head>
<body>
    <h2>Editar Cliente: <?= htmlspecialchars($cliente['Nome_Cliente']) ?></h2>
    <p>Email: <?= htmlspecialchars($cliente['Email']) ?: '<em>Não informado</em>' ?></p>

    <?php if (isset($_SESSION['mensagem'])): ?>
        <div class="mensagem <?= $_SESSION['tipo_mensagem'] ?>">
            <?= $_SESSION['mensagem'] ?>
        </div>
        <?php unset($_SESSION['mensagem'], $_SESSION['tipo_mensagem']); ?>
    <?php endif; ?>

    <form method="POST">
        <label for="formulario_id">Enviar formulário:</label>
        <select name="formulario_id" required>
            <option value="">Selecione um formulário</option>
            <?php while ($f = $formularios->fetch_assoc()): ?>
                <option value="<?= $f['id'] ?>"><?= htmlspecialchars($f['nome']) ?></option>
            <?php endwhile; ?>
        </select>
        <button type="submit">Enviar</button>
    </form>
</body>
</html>