import { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
import { apiRequest } from '../../../../helpers/apiRequest';
import { logger } from '../../../../helpers/logger';
import { handleApiError } from '../../../../helpers/errorHandler';
import { findSiteId } from '../../../../helpers/siteHelpers';

/**
 * Get Site Details
 *
 * GET /central/v2/sites/{site_id}
 *
 * @param this The n8n execution context
 * @returns Formatted API response
 */
export async function getSiteDetails(this: IExecuteFunctions): Promise<INodeExecutionData[]> {
	try {
		// Get parameters
		const lookupBy = this.getNodeParameter('lookupBy', 0, 'id') as string;
		let siteId: number;

		if (lookupBy === 'name') {
			// Lookup by site name
			const siteName = this.getNodeParameter('site_name', 0) as string;
			logger.debug('monitoring:site:getSiteDetails', `Looking up site ID for name: ${siteName}`);

			const foundSiteId = await findSiteId.call(this, siteName);
			if (foundSiteId === null) {
				throw new Error(`Site not found with name: ${siteName}`);
			}
			siteId = foundSiteId;
			logger.debug(
				'monitoring:site:getSiteDetails',
				`Found site ID: ${siteId} for name: ${siteName}`,
			);
		} else {
			// Lookup by site ID
			siteId = this.getNodeParameter('site_id', 0) as number;
		}

		logger.debug('monitoring:site:getSiteDetails', `Getting details for site: ${siteId}`);

		// Make API request
		const endpoint = `/central/v2/sites/${siteId}`;
		const responseData = await apiRequest.call(this, 'GET', endpoint);

		logger.debug('monitoring:site:getSiteDetails', 'Successfully retrieved site details');

		// Return formatted response
		return [{ json: responseData }];
	} catch (error) {
		logger.error('monitoring:site:getSiteDetails:error', { message: error.message });
		return handleApiError.call(this, error, 'Failed to get site details');
	}
}
