package example;

import com.zaxxer.hikari.HikariDataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public final class FirstQuery {
    private FirstQuery() {}

    public static void query(HikariDataSource source) throws SQLException {
        String sql = """
                select current_database() as database_name, current_user as user_name,
                       label from pool_marker where id = ?
                """;
        try (Connection connection = source.getConnection();
             PreparedStatement statement = connection.prepareStatement(sql)) {
            statement.setInt(1, 1);
            statement.setQueryTimeout(2);
            try (ResultSet rows = statement.executeQuery()) {
                Connections.require(rows.next(), "Marker row is missing");
                String database = rows.getString("database_name");
                String user = rows.getString("user_name");
                String label = rows.getString("label");
                Connections.require("pool_lab".equals(database), "Unexpected database");
                Connections.require("lab_app".equals(user), "Unexpected role");
                Connections.require("ready".equals(label), "Unexpected marker");
                Connections.require(!rows.next(), "Expected exactly one row");
                System.out.println("database=" + database + " user=" + user
                        + " label=" + label + " autoCommit=" + connection.getAutoCommit());
            }
        }
    }

    public static void main(String[] arguments) throws SQLException {
        try (HikariDataSource source = Connections.pool()) {
            query(source);
            Connections.require(source.getHikariPoolMXBean().getActiveConnections() == 0,
                    "Connection was not returned");
            System.out.println("activeAfterQuery=0");
        }
    }
}
