module exchange_declare;
import std.stdio;
import std.string;
import std.exception;
import std.conv:to;

import kaleidic.api.rabbitmq;
import kaleidic.api.rabbitmq.utils;


int main(string[] args)
{
	if (args.length < 5)
	{
		stderr.writeln("Usage: amqp_exchange_declare host port exchange exchangetype");
		return 1;
	}

	auto hostname = args[1];
	auto port = args[2].to!int;
	auto exchange = args[3];
	auto exchangetype = args[4];

	amqp_connection_state_t conn = amqp_new_connection();

	auto socket = amqp_tcp_socket_new(conn);
	enforce(socket,"error creating TCP socket");
	auto status = amqp_socket_open(socket, hostname.toStringz, port);
	enforce(status, "opening TCP socket");

	die_on_amqp_error(amqp_login(conn, "/".ptr, 0, 131072, 0, SaslMethod.plain, "guest".ptr, "guest".ptr), "Logging in");
	amqp_channel_open(conn, 1);
	die_on_amqp_error(amqp_get_rpc_reply(conn), "Opening channel");

	amqp_exchange_declare(conn, 1, amqp_string(exchange), amqp_string(exchangetype),
			0, 0, 0, 0, cast(amqp_table_t) amqp_empty_table);
	die_on_amqp_error(amqp_get_rpc_reply(conn), "Declaring exchange");

	die_on_amqp_error(amqp_channel_close(conn, 1, ReplySuccess), "Closing channel");
	die_on_amqp_error(amqp_connection_close(conn, ReplySuccess), "Closing connection");
	die_on_error(amqp_destroy_connection(conn), "Ending connection");
	return 0;
}