import { IExecuteFunctions } from 'n8n-workflow';
import { logger } from '../../../helpers/logger';
import { listSites } from './operations/listSites.methods';
import { createSite } from './operations/createSite.methods';
import { getSiteDetails } from './operations/getSiteDetails.methods';
import { updateSite } from './operations/updateSite.methods';
import { associateSiteToDevice } from './operations/associateSiteToDevice.methods';
import { unassociateSiteFromDevice } from './operations/unassociateSiteFromDevice.methods';
import { associateSiteToDevices } from './operations/associateSiteToDevices.methods';
import { unassociateSiteFromDevices } from './operations/unassociateSiteFromDevices.methods';

/**
 * All operations available for the site resource
 */
export const siteOperations = {
	listSites,
	createSite,
	getSiteDetails,
	updateSite,
	associateSiteToDevice,
	unassociateSiteFromDevice,
	associateSiteToDevices,
	unassociateSiteFromDevices,
};

/**
 * Check if a site operation exists
 * @param operation Operation name to check
 * @returns boolean indicating if the operation exists
 */
export function hasSiteOperation(operation: string): boolean {
	const exists = !!siteOperations[operation as keyof typeof siteOperations];
	logger.debug(
		'monitoring:site:check',
		`Operation "${operation}" ${exists ? 'exists' : 'does not exist'}`,
	);
	return exists;
}
