package com.yanzuoguang.mq.service.impl;

import com.rabbitmq.client.Channel;
import com.yanzuoguang.mq.service.MessageService;
import com.yanzuoguang.mq.service.MqService;
import com.yanzuoguang.mq.service.QueueService;
import com.yanzuoguang.mq.vo.MessageVo;
import com.yanzuoguang.mq.vo.QueueVo;
import com.yanzuoguang.mq.vo.req.QueueQueryReqVo;
import com.yanzuoguang.util.log.Log;
import com.yanzuoguang.util.vo.PageSizeData;
import com.yanzuoguang.util.vo.ResponseResult;
import org.springframework.amqp.core.Message;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.io.IOException;

/**
 * 消息队列服务实现类
 *
 * @author 颜佐光
 */
@Component
public class MqServiceImpl implements MqService {

    @Autowired
    private QueueService queueService;

    @Autowired
    private MessageService messageService;

    /**
     * 保存演示DEMO
     *
     * @param req
     */
    @Override
    public String createQueue(QueueVo req) {
        req.check();
        queueService.create(req);
        return "创建成功";
    }

    /**
     * 发送消息
     *
     * @param req 需要发送的消息
     * @return 消息编号,但是没有任何意义,发送成功会更改
     */
    @Override
    public String message(MessageVo req) {
        req.check();
        return messageService.send(req);
    }

    /**
     * 发送错误消息
     *
     * @param req
     * @return
     */
    @Override
    public String messageError(MessageVo req) {
        req.check();
        return messageService.onError(req);
    }

    /**
     * 消息收到确认
     *
     * @param message 收到的消息
     * @param channel  收到的通道
     */
    @Override
    public void basicAck(Message message, Channel channel) {
        try {
            channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
        } catch (IOException e) {
            Log.error(MessageServiceImpl.class, e);
        }
    }
}