/*-
 * ~~~~~~licensing~~~~~~
 * system-group-profile-impl-default
 * ==========
 * Copyright (C) 2020 - 2025 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/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;
    }
}
