package mq

import (
	"fmt"
	"github.com/streadway/amqp"
)

var mqUrl = "amqp://admin:admin@127.0.0.1:5672/"

// 除了simple 模式外、其他的模式都是由 队列 交换机 key 不同组合实现的
type RabbitMQ struct {
	conn      *amqp.Connection
	channel   *amqp.Channel
	QueueName string //队列
	Exchange  string //交换机
	Key       string //key
	MQUrl     string //连接信息
}

// 创建RabbitMQ 实例
func newRabbitMQ(queueName, exchange, key string) (*RabbitMQ, error) {
	rabbitMQ := &RabbitMQ{
		QueueName: queueName,
		Exchange:  exchange,
		Key:       key,
		MQUrl:     mqUrl,
	}

	var err error
	// dial mq
	rabbitMQ.conn, err = amqp.Dial(rabbitMQ.MQUrl)
	rabbitMQ.failOnErr(err, "创建连接错误")
	if err != nil {
		return nil, err
	}
	// get channel
	rabbitMQ.channel, err = rabbitMQ.conn.Channel()
	if err != nil {
		return nil, err
	}

	return rabbitMQ, nil
}

// 错误处理
func (r *RabbitMQ) failOnErr(err error, message string) {
	if err != nil {
		panic(fmt.Sprintf("%s:%s", err.Error(), message))
	}
}