#!/usr/bin/env python
import pika


def get_connection():
    return pika.BlockingConnection(pika.ConnectionParameters(host="localhost"))


def deliver(body, queue_name):
    print("forward to: %s" % queue_name)
    deliver_connection = get_connection()
    deliver_channel = deliver_connection.channel()
    deliver_channel.queue_declare(queue=queue_name, durable=True)
    deliver_channel.basic_publish(exchange="", routing_key=queue_name, body=body)
    deliver_connection.close()


def listen(from_queue_name, to_queue_name):
    def fwd_callback(ch, method, properties, body):
        delivered = deliver(body, to_queue_name)
        ch.basic_ack(delivery_tag=method.delivery_tag)

    listen_connection = get_connection()
    listen_channel = listen_connection.channel()
    listen_channel.queue_declare(queue=from_queue_name, durable=True)
    listen_channel.basic_consume(
        queue=from_queue_name, on_message_callback=fwd_callback
    )
    listen_channel.start_consuming()


def forward(from_queue_name, to_queue_name):
    listen(from_queue_name, to_queue_name)