// api/monitoring/client/client.descriptions.ts
import { INodeProperties } from 'n8n-workflow';
import { addDescriptions } from '../../../helpers/deduplicate';
import { getClientsDescription } from './operations/getClients.descriptions';
import { getDetailDescription } from './operations/getDetail.descriptions';
import { getClientDescription } from './operations/getClient.descriptions';
import { getMobilityDescription } from './operations/getMobility.descriptions';
import { getUsageDescription } from './operations/getUsage.descriptions';
import { getTopnDescription } from './operations/getTopn.descriptions';
import { getCountDescription } from './operations/getCount.descriptions';

/**
 * Operation selector for the client resource
 */
export const clientOperationSelector: INodeProperties = {
	displayName: 'Operation',
	name: 'operation',
	type: 'options',
	noDataExpression: true,
	displayOptions: {
		show: {
			resource: ['client'],
			domain: ['monitoring'],
		},
	},
	options: [
		{
			name: 'Get Wireless Clients',
			value: 'getWirelessClients',
			description: 'List Connected Wireless Clients',
			action: 'Get Wireless Clients',
		},
		{
			name: 'Get Wired Clients',
			value: 'getWiredClients',
			description: 'List Connected Wired Clients',
			action: 'Get Wired Clients',
		},
		{
			name: 'Get Unified Clients',
			value: 'getUnifiedClients',
			description: 'List Unified Clients (Wired/Wireless)',
			action: 'Get Unified Clients',
		},
		{
			name: 'Get Client Details',
			value: 'getDetail',
			description: 'Get unified client details',
			action: 'Get Client Details',
		},
		{
			name: 'Get Wireless Client Details',
			value: 'getWirelessClientDetails',
			description: 'Get connected wireless client details',
			action: 'Get Wireless Client Details',
		},
		{
			name: 'Get Wired Client Details',
			value: 'getWiredClientDetails',
			description: 'Get connected wired client details',
			action: 'Get Wired Client Details',
		},
		{
			name: 'Get Client Mobility Trail',
			value: 'getMobility',
			description: 'Get wireless client mobility trail',
			action: 'Get Client Mobility Trail',
		},
		{
			name: 'Get Bandwidth Usage',
			value: 'getUsage',
			description: 'Get clients bandwidth usage over a time period',
			action: 'Get Bandwidth Usage',
		},
		{
			name: 'Get Top N Clients',
			value: 'getTopn',
			description: 'Get top N client details over a time period',
			action: 'Get Top N Clients',
		},
		{
			name: 'Get Client Count',
			value: 'getCount',
			description: 'Get the total clients connected',
			action: 'Get Client Count',
		},
	],
	default: 'getWirelessClients',
};

// Combined descriptions for all operations in this resource
export const clientDescriptions: INodeProperties[] = [clientOperationSelector];

// Add each operation's descriptions
addDescriptions(clientDescriptions, getClientsDescription);
addDescriptions(clientDescriptions, getDetailDescription);
addDescriptions(clientDescriptions, getClientDescription);
addDescriptions(clientDescriptions, getMobilityDescription);
addDescriptions(clientDescriptions, getUsageDescription);
addDescriptions(clientDescriptions, getTopnDescription);
addDescriptions(clientDescriptions, getCountDescription);
