/*-
 * ~~~~~~licensing~~~~~~
 * system-group-profile-impl-default
 * ==========
 * Copyright (C) 2020 - 2021 EmDev LLC
 * ==========
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * ~~~~~~/licensing~~~~~~
 */
package ru.entaxy.esb.system.groups.registry.system.groups.profile.impl.defaults;

import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Message;
import org.apache.camel.ProducerTemplate;
import org.apache.camel.component.jms.JmsComponent;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import ru.entaxy.esb.system.groups.registry.system.groups.profile.SystemGroupProfile;
import ru.entaxy.esb.system.profile.commons.CommonProfile;
import ru.entaxy.esb.system.registry.systems.profile.SystemCollectorListener;

import javax.jms.ConnectionFactory;

public class DefaultSystemGroupProfile extends CommonProfile implements SystemGroupProfile {

    private static final Log LOG = LogFactory.getLog(DefaultSystemGroupProfile.class);
    private static final String NAME_JMS_COMPONENT = "jms";

    private String systemGroupName = "system";
    private String profileName = "default";
    private String destination = "default";
    private final String dlq = "DLQ";
    private ConnectionFactory jmsConnectionFactory;

    private SystemCollectorListener systemCollectorListener;

    public DefaultSystemGroupProfile() {
    }

    @Override
    public String getProfileName() {
        return profileName;
    }

    @Override
    protected void doSend(Object request) {
        LOG.info("Send request " + request + "in " + destination);
        Exchange exchange = (Exchange) request;

        ProducerTemplate template = exchange.getContext().createProducerTemplate();
        addJmsComponent(exchange.getContext());

        Message message = exchange.getMessage();
        message.setHeader("NTX_SystemId", systemGroupName);
        message.setHeader("ExchangePattern", "InOnly");

        template.send(destination, exchange);
    }

    private void addJmsComponent(CamelContext context) {
        if (!context.getComponentNames().contains(NAME_JMS_COMPONENT))
            addJmsComponent(context, NAME_JMS_COMPONENT);
    }

    private void addJmsComponent(CamelContext context, String componentName) {
        JmsComponent component = new JmsComponent(context);
        component.setConnectionFactory(jmsConnectionFactory);

        context.addComponent(componentName, component);
    }

    public void setSystemGroupName(String systemGroupName) {
        this.systemGroupName = systemGroupName;
    }

    public void setProfileName(String profileName) {
        this.profileName = profileName;
    }

    public void setDestination(String destination) {
        this.destination = destination;
    }

    public void setJmsConnectionFactory(ConnectionFactory jmsConnectionFactory) {
        this.jmsConnectionFactory = jmsConnectionFactory;
    }
}
