// api/firmware/upgrade/upgrade.descriptions.ts
import { INodeProperties } from 'n8n-workflow';
import { addDescriptions } from '../../../helpers/deduplicate';
import { upgradeFirmwareDescription } from './operations/upgradeFirmware.descriptions';
import { cancelUpgradeDescription } from './operations/cancelUpgrade.descriptions';
import { setComplianceVersionDescription } from './operations/setComplianceVersion.descriptions';
import { getComplianceVersionDescription } from './operations/getComplianceVersion.descriptions';
import { clearComplianceVersionDescription } from './operations/clearComplianceVersion.descriptions';

export const resourceOperationSelector: INodeProperties = {
	displayName: 'Operation',
	name: 'operation',
	type: 'options',
	noDataExpression: true,
	displayOptions: {
		show: {
			resource: ['upgrade'],
			domain: ['firmware'],
		},
	},
	options: [
		{
			name: 'Cancel Scheduled Upgrade',
			value: 'cancelUpgrade',
			description: 'Cancel a scheduled firmware upgrade',
			action: 'Cancel a scheduled firmware upgrade',
		},
		{
			name: 'Clear Compliance Version',
			value: 'clearComplianceVersion',
			description: 'Clear firmware compliance version for a device type',
			action: 'Clear firmware compliance version',
		},
		{
			name: 'Get Compliance Version',
			value: 'getComplianceVersion',
			description: 'Get firmware compliance version for a device type',
			action: 'Get firmware compliance version',
		},
		{
			name: 'Set Compliance Version',
			value: 'setComplianceVersion',
			description: 'Set firmware compliance version for a device type',
			action: 'Set firmware compliance version',
		},
		{
			name: 'Upgrade Firmware',
			value: 'upgradeFirmware',
			description: 'Initiate a firmware upgrade for a device or group',
			action: 'Upgrade firmware for devices',
		},
	],
	default: 'getComplianceVersion',
};

export const resourceDescriptions: INodeProperties[] = [resourceOperationSelector];

// Add each operation's descriptions
addDescriptions(resourceDescriptions, upgradeFirmwareDescription);
addDescriptions(resourceDescriptions, cancelUpgradeDescription);
addDescriptions(resourceDescriptions, setComplianceVersionDescription);
addDescriptions(resourceDescriptions, getComplianceVersionDescription);
addDescriptions(resourceDescriptions, clearComplianceVersionDescription);
