package edu.upvehu.gbg.tap.database;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;

public class LectorMensajes {

    // Configuración de la base de datos
    private static final String URL = "jdbc:mysql://localhost:3306/ChatDB";
    private static final String USER = "usuario"; // Tu usuario de MySQL
    private static final String PASSWORD = "contraseña"; // Tu contraseña

    public static void main(String[] args) {
        
        // Consulta SQL para obtener mensajes y el nombre del contacto de la conversación
        String sql = "SELECT m.id, m.uuid_xml, m.remitente, m.fecha_hora, m.texto, c.contacto " +
                     "FROM Mensaje m " +
                     "JOIN Conversacion c ON m.conversacion_id = c.id";

        // Uso de try-with-resources para cerrar automáticamente la conexión
	// Al DriverManager se le pide la conexión, a la conexión un Statement y sobre este se ejecuta la query SQL
        try (Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
             Statement stmt = conn.createStatement();
             ResultSet rs = stmt.executeQuery(sql)) {

            System.out.println("--- LISTADO DE MENSAJES ---");
            System.out.printf("%-5s | %-15s | %-15s | %-20s | %s%n", 
                              "ID", "REMITENTE", "CON CONTACTO", "FECHA", "TEXTO");
            System.out.println("---------------------------------------------------------------------------------------");

	    // El ResultSet es una especie de matriz que se recorre por filas con un "apuntador"
	    // Cada fila es un registo y las columnas son los campos del registro.
	    // En este ejemplo se da por sabido el contenido de la tabla, pero de no ser así, puede "investigarse" pidiendo su ResultSetMetaData
	    //          ResultSetMetaData rsmd = rs.getMetaData(); 
            while (rs.next()) {
                int id = rs.getInt("id");
                String remitente = rs.getString("remitente");
                String contacto = rs.getString("contacto");
                String fecha = rs.getTimestamp("fecha_hora").toString();
                String texto = rs.getString("texto");

                System.out.printf("%-5d | %-15s | %-15s | %-20s | %s%n", 
                                  id, remitente, contacto, fecha, texto);
            }

        } catch (SQLException e) {
            System.err.println("Error al conectar o consultar la base de datos:");
            e.printStackTrace();
        }
    }
}
