/*-
 * ~~~~~~licensing~~~~~~
 * file-adapter
 * ==========
 * Copyright (C) 2020 - 2023 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.platform.runtime.connections.sftp;

import org.apache.camel.ExtendedCamelContext;
import org.apache.camel.component.file.GenericFileEndpoint;
import org.apache.camel.component.file.remote.SftpComponent;
import org.apache.camel.component.file.remote.SftpRemoteFile;
import org.apache.camel.spi.PropertyConfigurer;
import org.apache.camel.util.StringHelper;
import ru.entaxy.platform.base.support.CommonUtils;

import java.util.Map;

public class SftpConnectionComponent extends SftpComponent {

	public static final String CONNECTION_STRING_PLACEHOLDER = "CONNECTION_STRING_PLACEHOLDER";
	protected String connectionString = "";

	@Override
	protected GenericFileEndpoint<SftpRemoteFile> createEndpoint(String uri, String remaining, Map<String, Object> parameters)
			throws Exception {

		if (CommonUtils.isValid(connectionString)) {
			uri = uri.replace(CONNECTION_STRING_PLACEHOLDER, connectionString);
			remaining = connectionString;
		}

		String schema = uri.substring(0, uri.indexOf(":"));
		String newUri = uri.replace(schema+":", "sftp:");

		log.debug("CREATING ENDPOINT FOR [{}]", uri);
		return super.createEndpoint(newUri, remaining, parameters);
	}

	protected void doBuild() throws Exception {
		String name = "sftp";
		// just grab first scheme name if the component has scheme alias (eg http,https)
		if (name.contains(",")) {
			name = StringHelper.before(name, ",");
		}
		final String componentConfigurerName = name + "-component-configurer";
		componentPropertyConfigurerLocal = getCamelContext().adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(componentConfigurerName, getCamelContext());
		final String endpointConfigurerName = name + "-endpoint-configurer";
		endpointPropertyConfigurerLocal = getCamelContext().adapt(ExtendedCamelContext.class).getConfigurerResolver().resolvePropertyConfigurer(endpointConfigurerName, getCamelContext());
	}
	@Override
	public PropertyConfigurer getComponentPropertyConfigurer() {
		return componentPropertyConfigurerLocal;
	}

	private volatile PropertyConfigurer componentPropertyConfigurerLocal;
	@Override
	public PropertyConfigurer getEndpointPropertyConfigurer() {
		return endpointPropertyConfigurerLocal;
	}
	private volatile PropertyConfigurer endpointPropertyConfigurerLocal;

	public String getConnectionString() {
		return connectionString;
	}

	public void setConnectionString(String connectionString) {
		this.connectionString = connectionString;
	}
}
