<?php
/**
 * API: Enviar Mensagem no Chat
 */

// Garantir que não há output antes do JSON
if (ob_get_level()) {
    ob_clean();
}
header('Content-Type: application/json; charset=utf-8');

session_start();

require_once __DIR__ . '/../../config/config_db.php';
require_once __DIR__ . '/../auth_helper.php';
require_once __DIR__ . '/../chat_helper.php';

$usuario = usuario_logado();
if (!$usuario) {
    echo json_encode(['success' => false, 'error' => 'Não autenticado']);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    echo json_encode(['success' => false, 'error' => 'Método não permitido']);
    exit;
}

$conversa_id = intval($_POST['conversa_id'] ?? 0);
$remetente_id = intval($_POST['remetente_id'] ?? $usuario['id']);
$tipo_remetente = $_POST['tipo_remetente'] ?? ($usuario['tipo'] === 'admin' ? 'admin' : 'usuario');
$mensagem = trim($_POST['mensagem'] ?? '');
// Validar: precisa ter mensagem, e conversa_id válido
if (empty($mensagem)) {
    echo json_encode(['success' => false, 'error' => 'Digite uma mensagem']);
    exit;
}

if ($conversa_id <= 0) {
    echo json_encode(['success' => false, 'error' => 'Conversa inválida']);
    exit;
}

// Verificar permissão
if ($remetente_id != $usuario['id'] && $usuario['tipo'] !== 'admin') {
    echo json_encode(['success' => false, 'error' => 'Sem permissão']);
    exit;
}

try {
    // Verificar se a conversa existe
    $stmt_check = $pdo->prepare("SELECT id FROM chat_conversas WHERE id = ? LIMIT 1");
    $stmt_check->execute([$conversa_id]);
    $conversa_existe = $stmt_check->fetch(PDO::FETCH_ASSOC);
    
    if (!$conversa_existe) {
        echo json_encode(['success' => false, 'error' => 'Conversa não encontrada']);
        exit;
    }
    
    if (enviar_mensagem_chat($conversa_id, $remetente_id, $tipo_remetente, $mensagem, null)) {
        // Buscar mensagem criada (verificar se coluna arquivo_url existe)
        try {
            $stmt_check_col = $pdo->query("SHOW COLUMNS FROM chat_mensagens LIKE 'arquivo_url'");
            $coluna_existe = $stmt_check_col->rowCount() > 0;
        } catch (PDOException $e) {
            $coluna_existe = false;
        }
        
        if ($coluna_existe) {
            $stmt = $pdo->prepare("
                SELECT id, remetente_id, tipo_remetente, mensagem, arquivo_url, created_at
                FROM chat_mensagens
                WHERE conversa_id = ? AND remetente_id = ? 
                ORDER BY id DESC
                LIMIT 1
            ");
        } else {
            $stmt = $pdo->prepare("
                SELECT id, remetente_id, tipo_remetente, mensagem, created_at
                FROM chat_mensagens
                WHERE conversa_id = ? AND remetente_id = ? 
                ORDER BY id DESC
                LIMIT 1
            ");
        }
        $stmt->execute([$conversa_id, $remetente_id]);
        $mensagem_criada = $stmt->fetch(PDO::FETCH_ASSOC);
        
        // Se não encontrou pela busca específica, buscar a última mensagem da conversa
        if (!$mensagem_criada) {
            try {
                if ($coluna_existe) {
                    $stmt_fallback = $pdo->prepare("
                        SELECT id, remetente_id, tipo_remetente, mensagem, arquivo_url, created_at
                        FROM chat_mensagens
                        WHERE conversa_id = ?
                        ORDER BY id DESC
                        LIMIT 1
                    ");
                } else {
                    $stmt_fallback = $pdo->prepare("
                        SELECT id, remetente_id, tipo_remetente, mensagem, created_at
                        FROM chat_mensagens
                        WHERE conversa_id = ?
                        ORDER BY id DESC
                        LIMIT 1
                    ");
                }
                $stmt_fallback->execute([$conversa_id]);
                $mensagem_criada = $stmt_fallback->fetch(PDO::FETCH_ASSOC);
            } catch (PDOException $e) {
                error_log("Erro ao buscar mensagem criada (fallback): " . $e->getMessage());
            }
        }
        
        if ($mensagem_criada) {
            
            echo json_encode([
                'success' => true,
                'mensagem' => $mensagem_criada
            ]);
        } else {
            // Se ainda não encontrou, retorna sucesso mas sem mensagem (será recarregada pelo frontend)
            echo json_encode([
                'success' => true,
                'mensagem' => null,
                'message' => 'Mensagem enviada com sucesso. Recarregando...'
            ]);
        }
    } else {
        echo json_encode(['success' => false, 'error' => 'Erro ao enviar mensagem']);
    }
} catch (Exception $e) {
    error_log("Erro ao enviar mensagem: " . $e->getMessage());
    error_log("Stack trace: " . $e->getTraceAsString());
    echo json_encode(['success' => false, 'error' => 'Erro interno: ' . $e->getMessage()]);
}

