// getClientRoamHistory.methods.ts
import { IExecuteFunctions, INodeExecutionData } from 'n8n-workflow';
import { IClientRoamHistory } from '../keymanagement.types';
import {
	KEYMANAGEMENT_BASE_PATH,
	KEYMANAGEMENT_ENDPOINTS,
	validateClientMac,
} from '../keymanagement.common';
import { apiRequest } from '../../../helpers/apiRequest';
import { logger } from '../../../helpers/logger';

export async function getClientRoamHistory(this: IExecuteFunctions): Promise<INodeExecutionData[]> {
	const clientMac = this.getNodeParameter('client_mac', 0) as string;

	logger.info(
		'keymanagement:getClientRoamHistory',
		`Retrieving roam history for client: ${clientMac}`,
	);

	validateClientMac(clientMac);

	const endpoint = `${KEYMANAGEMENT_BASE_PATH}${KEYMANAGEMENT_ENDPOINTS.CLIENT_ROAM_HISTORY}/${clientMac}`;

	try {
		const response = await apiRequest.call(this, 'GET', endpoint, {}, {});

		logger.debug(
			'keymanagement:getClientRoamHistory',
			`Retrieved roam history for ${clientMac} - event count: ${response.roam_events?.length || 0}`,
		);

		return [
			{
				json: {
					client_mac: clientMac,
					roam_events: response.roam_events || [],
					...response,
				},
			},
		];
	} catch (error) {
		logger.error(
			'keymanagement:getClientRoamHistory:error',
			`Failed to retrieve roam history for ${clientMac}: ${error.message}`,
		);

		// Note: API exists but implementation may be incomplete
		if (error.message.includes('not implemented') || error.message.includes('incomplete')) {
			logger.warn(
				'keymanagement:getClientRoamHistory',
				'API implementation is incomplete, returning empty history',
			);
			return [
				{
					json: {
						client_mac: clientMac,
						roam_events: [],
						status: 'incomplete_implementation',
					},
				},
			];
		}

		throw error;
	}
}
