<?php
    require('conexion.php'); // Incluye la conexión a la base de datos

    
    // Consulta para obtener todas las publicaciones con datos del autor
    $sql_publicaciones = "
    SELECT p.publicacion_id, p.usuario_id AS receptor, p.titulo, p.categoria,
        DATE(p.fecha_publicacion) AS fecha, TIME(p.fecha_publicacion) AS hora, 
        p.contenido, u.nombres, u.apellidos, u.documento AS autor_cedula 
    FROM publicaciones p 
    JOIN usuarios u ON p.usuario_id = u.usuario_id 
    /*ORDER BY p.fecha_publicacion DESC*/";

    $result_publicaciones = $conn->query($sql_publicaciones);
    $publicaciones = [];

    if ($result_publicaciones->num_rows > 0) {
        while ($row_publicacion = $result_publicaciones->fetch_assoc()) {
            // Obtener los mensajes de cada publicación
            $sql_mensajes = "
                SELECT m.mensaje_id, m.contenido, DATE(m.fecha_envio) AS fecha, TIME(m.fecha_envio) AS hora, 
                    u_m.nombres, u_m.apellidos, u_m.documento AS mensaje_cedula
                FROM mensajes m
                JOIN usuarios u_m ON m.emisor_id = u_m.usuario_id
                WHERE m.publicacion_id = ?";

            $stmt_mensajes = $conn->prepare($sql_mensajes);
            $stmt_mensajes->bind_param("i", $row_publicacion['publicacion_id']);
            $stmt_mensajes->execute();
            $result_mensajes = $stmt_mensajes->get_result();

            $mensajes = [];
            if ($result_mensajes->num_rows > 0) {
                while ($row_mensaje = $result_mensajes->fetch_assoc()) {
                    $mensajes[] = $row_mensaje;
                }
            }

            $stmt_mensajes->close();

            // Agregar los mensajes a la publicación
            $row_publicacion['mensajes'] = $mensajes;
            $publicaciones[] = $row_publicacion;
        }
    }
    

    // Consulta para contar el total de publicaciones
    $sql_total = "SELECT COUNT(*) AS total FROM publicaciones";
    $result_total = $conn->query($sql_total);
    $row_total = $result_total->fetch_assoc();
    $total_publicaciones = $row_total['total'];

    

    // Obtener las 3 publicaciones más recientes con el conteo de mensajes
    $sql_recientes = "
        SELECT p.publicacion_id, p.titulo, DATE(p.fecha_publicacion) AS fecha, u.nombres, u.apellidos, p.categoria,
            (SELECT COUNT(*) FROM mensajes m WHERE m.publicacion_id = p.publicacion_id) AS total_mensajes
        FROM publicaciones p 
        JOIN usuarios u ON p.usuario_id = u.usuario_id
        ORDER BY p.fecha_publicacion DESC
        LIMIT 3";

    $result_recientes = $conn->query($sql_recientes);
    $publicaciones_recientes = [];

    if ($result_recientes->num_rows > 0) {
        while ($row = $result_recientes->fetch_assoc()) {
            $publicaciones_recientes[] = $row;
        }
    }

    
    // 1️⃣ Verificar si hay un tag seleccionado desde la URL
    $tag_seleccionado = isset($_GET['tag']) ? $_GET['tag'] : null;
    
   /*
    // 2️⃣ Consulta base para obtener publicaciones
    $sql_publicaciones = "
        SELECT p.publicacion_id, p.usuario_id AS receptor,  p.titulo, DATE(p.fecha_publicacion) AS fecha, 
            TIME(p.fecha_publicacion) AS hora, p.contenido, p.categoria,
            u.nombres, u.apellidos, u.documento AS autor_cedula 
        FROM publicaciones p 
        JOIN usuarios u ON p.usuario_id = u.usuario_id";
    */ 
    // 3️⃣ Si hay un tag seleccionado, modificar la consulta para filtrar por tag
    if ($tag_seleccionado) {
        $sql_publicaciones .= " 
            JOIN publicaciones_tags pt ON p.publicacion_id = pt.publicacion_id
            WHERE pt.tag = ?";
    }

    // 4️⃣ Preparar la consulta y verificar si es válida
    $stmt = $conn->prepare($sql_publicaciones);
    if (!$stmt) {
        die("Error en la consulta SQL: " . $conn->error);
    }

    // 5️⃣ Si hay un tag, enlazar el parámetro antes de ejecutar
    if ($tag_seleccionado) {
        $stmt->bind_param("s", $tag_seleccionado);
    }

    // 6️⃣ Ejecutar la consulta
    if (!$stmt->execute()) {
        die("Error al ejecutar la consulta: " . $stmt->error);
    }

    // 7️⃣ Obtener resultados
    $result_publicaciones = $stmt->get_result();

    $publicaciones = [];
    if ($result_publicaciones->num_rows > 0) {
        while ($row_publicacion = $result_publicaciones->fetch_assoc()) {
            // Obtener los mensajes de cada publicación
            $sql_mensajes = "
                SELECT m.mensaje_id, m.contenido, DATE(m.fecha_envio) AS fecha, TIME(m.fecha_envio) AS hora, 
                    u_m.nombres, u_m.apellidos, u_m.documento AS mensaje_cedula
                FROM mensajes m
                JOIN usuarios u_m ON m.emisor_id = u_m.usuario_id
                WHERE m.publicacion_id = ?";

            $stmt_mensajes = $conn->prepare($sql_mensajes);
            $stmt_mensajes->bind_param("i", $row_publicacion['publicacion_id']);
            $stmt_mensajes->execute();
            $result_mensajes = $stmt_mensajes->get_result();

            $mensajes = [];
            if ($result_mensajes->num_rows > 0) {
                while ($row_mensaje = $result_mensajes->fetch_assoc()) {
                    $mensajes[] = $row_mensaje;
                }
            }

            $stmt_mensajes->close();

            // Agregar los mensajes a la publicación
            $row_publicacion['mensajes'] = $mensajes;
            $publicaciones[] = $row_publicacion;
        }
    }

    /*if ($result_publicaciones->num_rows > 0) {
        while ($row = $result_publicaciones->fetch_assoc()) {
            $publicaciones[] = $row;
            ///////
            

        }
    }*/
    
    // 8️⃣ Obtener lista de categorías con cantidad de publicaciones
    $sql_categorias = "SELECT categoria, COUNT(*) as cantidad FROM publicaciones GROUP BY categoria";
    $result_categorias = $conn->query($sql_categorias);
    $categorias = [];
    if ($result_categorias->num_rows > 0) {
        while ($row = $result_categorias->fetch_assoc()) {
            $categorias[$row['categoria']] = $row['cantidad'];
        }
    }

    // 9️⃣ Obtener lista de tags populares con cantidad de publicaciones
    $sql_tags = "SELECT tag, COUNT(*) as cantidad FROM publicaciones_tags GROUP BY tag ORDER BY cantidad DESC LIMIT 10";
    $result_tags = $conn->query($sql_tags);
    $tags = [];
    if ($result_tags->num_rows > 0) {
        while ($row = $result_tags->fetch_assoc()) {
            $tags[$row['tag']] = $row['cantidad'];
        }
    }

    // 🔟 Cerrar conexión
    $stmt->close();
    $conn->close();
?> 
