// firmware/upgrade/operations/upgradeFirmware.descriptions.ts
import { INodeProperties } from 'n8n-workflow';

/**
 * Parameters for the upgradeFirmware operation
 */
export const upgradeFirmwareDescription: INodeProperties[] = [
	{
		displayName: 'Target Type',
		name: 'targetType',
		type: 'options',
		options: [
			{
				name: 'Device Serial',
				value: 'serial',
				description:
					'Target a specific device by serial number (Note: For APs, this will be treated as a Swarm ID)',
			},
			{
				name: 'Swarm ID',
				value: 'swarm_id',
				description: 'Target a specific swarm by ID',
			},
			{
				name: 'Group',
				value: 'group',
				description: 'Target all devices in a group (requires Device Type selection)',
			},
		],
		default: 'serial',
		required: true,
		description: 'Type of target for the upgrade',
		displayOptions: {
			show: {
				operation: ['upgradeFirmware'],
				resource: ['upgrade'],
				domain: ['firmware'],
			},
		},
	},
	{
		displayName: 'Target Value',
		name: 'targetValue',
		type: 'string',
		default: '',
		required: true,
		description: 'Value of the target (serial number, swarm ID, or group name)',
		displayOptions: {
			show: {
				operation: ['upgradeFirmware'],
				resource: ['upgrade'],
				domain: ['firmware'],
			},
		},
	},
	{
		displayName: 'Device Type',
		name: 'deviceType',
		type: 'options',
		required: true,
		default: 'IAP',
		description:
			'Type of device to upgrade. Required for group upgrades, and determines whether to use serial or swarm_id for individual devices.',
		options: [
			{
				name: 'Access Points (IAP)',
				value: 'IAP',
			},
			{
				name: 'MAS Switches',
				value: 'MAS',
			},
			{
				name: 'Aruba Switches',
				value: 'HP',
			},
			{
				name: 'CX Switches',
				value: 'CX',
			},
			{
				name: 'Controllers',
				value: 'CONTROLLER',
			},
		],
		displayOptions: {
			show: {
				operation: ['upgradeFirmware'],
				resource: ['upgrade'],
				domain: ['firmware'],
			},
		},
	},
	{
		displayName: 'Firmware Version',
		name: 'firmwareVersion',
		type: 'string',
		required: false,
		default: '',
		description: 'The firmware version to upgrade to (if not specified, uses recommended version)',
		displayOptions: {
			show: {
				operation: ['upgradeFirmware'],
				resource: ['upgrade'],
				domain: ['firmware'],
			},
		},
	},
	{
		displayName: 'Options',
		name: 'options',
		type: 'collection',
		placeholder: 'Add Option',
		default: {},
		displayOptions: {
			show: {
				operation: ['upgradeFirmware'],
				resource: ['upgrade'],
				domain: ['firmware'],
			},
		},
		options: [
			{
				displayName: 'Reboot',
				name: 'reboot',
				type: 'boolean',
				default: false,
				description:
					'Whether to reboot the device after the upgrade (default: false). Applicable only on MAS, Aruba switches, CX switches, and controllers.',
			},
			{
				displayName: 'Model',
				name: 'model',
				type: 'string',
				default: '',
				description: 'Device model to upgrade (useful when upgrading at group level)',
			},
			{
				displayName: 'Schedule Time',
				name: 'firmwareScheduledAt',
				type: 'number',
				default: 0,
				description:
					'Unix timestamp (in seconds) to schedule the upgrade (0 or current time for immediate upgrade)',
			},
			{
				displayName: 'Exclude Groups',
				name: 'excludeGroups',
				type: 'string',
				default: '',
				placeholder: '["Group1", "Group2"]',
				description: 'JSON array of group names to exclude from the upgrade',
			},
			{
				displayName: 'Exclude Customers',
				name: 'excludeCustomers',
				type: 'string',
				default: '',
				placeholder: '["111111", "111112"]',
				description: 'JSON array of customer IDs to exclude from the upgrade',
			},
		],
	},
];
