/**
* Copyright Super iPaaS Integration LLC, an IBM Company 2024
*/
import { AppConstants } from '../constants/app-constants.js';
import { GatewaysJson } from '../index.js';
import { sendToGateway, validationManager } from '../service/gateway-service.js';
import { LogWrapper } from '../service/log-wrapper.js';

export const processDeployment = async (gatewaysJsonContent: GatewaysJson, zipBuffer: Buffer) => {
	const gatewayResponses = [];

	if (gatewaysJsonContent.gateways && gatewaysJsonContent.gateways.length > 0) {
		LogWrapper.logInfo('0105', `${gatewaysJsonContent.gateways.length}`);

		for (const gateway of gatewaysJsonContent.gateways) {
			const { gatewayURL, gatewayUser, gatewaySecret, is_mcsp_enabled } = gateway;
			LogWrapper.logDebug('0106', gatewayURL);

			try {
				const response = await sendToGateway(gatewayURL, gatewayUser, gatewaySecret, is_mcsp_enabled, zipBuffer, gatewaysJsonContent);
				LogWrapper.logDebug('0003', `Gateway Response: ${response.data}`);
				gatewayResponses.push(response);
			} catch (error) {
				if (error instanceof Error) {
					const errorMessage = `Error sending to ${gatewayURL}: ${error.message}`;
					LogWrapper.logError('0013', 'deploying to', errorMessage);
					gatewayResponses.push({ error: true, message: errorMessage });
				} else {
					const unknownErrorMessage = `Unknown error sending to ${gatewayURL}`;
					LogWrapper.logError('0003', unknownErrorMessage);
					gatewayResponses.push({ error: true, message: unknownErrorMessage });
				}
			}
		}
	} else {
		LogWrapper.logWarn('0003', 'No gateways to deploy.');
	}

	LogWrapper.logInfo('0003', 'Deployment process completed.');
	return gatewayResponses;
};

export async function validateGateways(url: string, authHeader: string): Promise<{ data: string; status: number }> {

	if (!url || !authHeader) {
		throw new Error(JSON.stringify({ message: { data: 'Invalid parameters: URL and Authorization Header are required.', status: 400 } }));
	}
	try {
		const result = await validationManager(`${url}${AppConstants.GATEWAY_VALIDATION_URL}`, authHeader);
		return result;

	} catch (error) {
		throw error;
	}
}


