<?php
/**
 * API: Buscar Mensagens do 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;
}

$conversa_id = intval($_GET['conversa_id'] ?? 0);
$ultima_mensagem_id = intval($_GET['ultima_mensagem_id'] ?? 0);

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

try {
    // Verificar permissão (usuário só pode ver suas próprias conversas, admin pode ver todas)
    global $pdo;
    $stmt = $pdo->prepare("SELECT usuario_id FROM chat_conversas WHERE id = ? LIMIT 1");
    $stmt->execute([$conversa_id]);
    $conversa = $stmt->fetch(PDO::FETCH_ASSOC);
    
    if (!$conversa) {
        echo json_encode(['success' => false, 'error' => 'Conversa não encontrada']);
        exit;
    }
    
    if ($usuario['tipo'] !== 'admin' && $conversa['usuario_id'] != $usuario['id']) {
        echo json_encode(['success' => false, 'error' => 'Sem permissão']);
        exit;
    }
    
    // Buscar mensagens
    $mensagens = buscar_mensagens_chat($conversa_id, $ultima_mensagem_id > 0 ? $ultima_mensagem_id : null);
    
    // Adicionar foto de perfil e nome de cada remetente (otimizado)
    $remetentes_ids = array_unique(array_column($mensagens, 'remetente_id'));
    $fotos_cache = [];
    $nomes_cache = [];
    
    if (!empty($remetentes_ids)) {
        $placeholders = implode(',', array_fill(0, count($remetentes_ids), '?'));
        $stmt_cache = $pdo->prepare("SELECT id, nome, foto_perfil FROM usuarios WHERE id IN ($placeholders)");
        $stmt_cache->execute($remetentes_ids);
        while ($row = $stmt_cache->fetch(PDO::FETCH_ASSOC)) {
            $fotos_cache[$row['id']] = $row['foto_perfil'];
            $nomes_cache[$row['id']] = $row['nome'];
        }
    }
    
    foreach ($mensagens as &$msg) {
        $msg['foto_perfil'] = $fotos_cache[$msg['remetente_id']] ?? null;
        $msg['remetente_nome'] = $nomes_cache[$msg['remetente_id']] ?? 'Usuário';
        
        // Ajustar caminho do arquivo se existir
        if (!empty($msg['arquivo_url'])) {
            $arquivo_path = $msg['arquivo_url'];
            if (strpos($arquivo_path, 'public/') === 0) {
                $arquivo_path = '/' . $arquivo_path;
            } elseif (strpos($arquivo_path, '/') !== 0) {
                $arquivo_path = '/' . $arquivo_path;
            }
            $msg['arquivo_url'] = $arquivo_path;
        }
    }
    unset($msg);
    
    // Marcar como lidas
    marcar_mensagens_lidas($conversa_id, $usuario['id']);
    
    echo json_encode([
        'success' => true,
        'mensagens' => $mensagens
    ]);
    
} catch (Exception $e) {
    error_log("Erro ao buscar mensagens: " . $e->getMessage());
    echo json_encode(['success' => false, 'error' => 'Erro interno']);
}

