import {
	IntegrationRecord,
	DestinationPlatforms,
	CreateDestinationConnectionPayload,
	DeleteDestinationPayload,
	ListDestinationsPayload,
	Integrations,
} from '@buildable/types';
import { makeHttpNetworkCall } from '@buildable/utils';
import { getIntegrationDefinitionId } from '@buildable/utils';

export const createDestinationConnectionApi = <T extends DestinationPlatforms>(
	headers: Record<string, string>,
	url: string,
	payload: CreateDestinationConnectionPayload<T>
) => {
	const integrationDefinitionId = getIntegrationDefinitionId(
		payload.type,
		'destination'
	);
	const authData = {
		name: payload.label,
		...payload.config,
	};

	const finalPayload = {
		integrationDefinitionId,
		authFormData: authData,
		type: payload.type,
		group: payload.group,
		name: payload.label,
		key: payload.key,
	};

	return makeHttpNetworkCall<IntegrationRecord>({
		method: 'POST',
		url,
		data: finalPayload,
		headers,
	});
};

export const deleteDestinationConnectionApi = (
	headers: Record<string, string>,
	url: string,
	payload: DeleteDestinationPayload
) => {
	return makeHttpNetworkCall({
		method: 'POST',
		url,
		data: payload,
		headers,
	});
};

export const listDestinationsApi = (
	headers: Record<string, string>,
	url: string,
	payload: ListDestinationsPayload
) => {
	return makeHttpNetworkCall<Integrations>({
		method: 'POST',
		url,
		data: {
			...payload,
			query: {
				...payload?.query,
				_id: {
					$regex: 'conn_dst',
				},
			},
		},
		headers,
	});
};

