import { INodeProperties } from 'n8n-workflow';
import { returnAllOption, limitOption } from './baseProperties';

export const clusterOperations: INodeProperties = {
	displayName: 'Operation',
	name: 'operation',
	type: 'options',
	noDataExpression: true,
	displayOptions: {
		show: {
			resource: ['cluster'],
		},
	},
	options: [
		{
			name: 'Get Version',
			value: 'getVersion',
			description: 'Get ProxMox VE version information (no special permissions required)',
			action: 'Get version',
		},
		{
			name: 'Get Status',
			value: 'getStatus',
			description: 'Get cluster status information (requires Sys.Audit permission)',
			action: 'Get cluster status',
		},
		{
			name: 'Get Resources',
			value: 'getResources',
			description: 'List all cluster resources',
			action: 'Get cluster resources',
		},
		{
			name: 'Get Nodes',
			value: 'getNodes',
			description: 'List all cluster nodes',
			action: 'Get cluster nodes',
		},
		{
			name: 'Get Tasks',
			value: 'getTasks',
			description: 'List cluster tasks',
			action: 'Get cluster tasks',
		},
		{
			name: 'Get Config',
			value: 'getConfig',
			description: 'Get cluster configuration',
			action: 'Get cluster configuration',
		},
	],
	default: 'getVersion',
};

export const clusterFields: INodeProperties[] = [
	// Get Resources fields
	{
		displayName: 'Resource Type',
		name: 'resourceType',
		type: 'options',
		options: [
			{ name: 'All', value: '' },
			{ name: 'VM', value: 'vm' },
			{ name: 'Storage', value: 'storage' },
			{ name: 'Node', value: 'node' },
		],
		default: '',
		description: 'Filter resources by type',
		displayOptions: {
			show: {
				resource: ['cluster'],
				operation: ['getResources'],
			},
		},
	},
	{
		displayName: returnAllOption.displayName,
		name: returnAllOption.name,
		type: returnAllOption.type,
		default: returnAllOption.default,
		description: returnAllOption.description,
		displayOptions: {
			show: {
				resource: ['cluster'],
				operation: ['getResources', 'getTasks', 'getNodes'],
			},
		},
	},
	{
		displayName: limitOption.displayName,
		name: limitOption.name,
		type: limitOption.type,
		typeOptions: limitOption.typeOptions,
		default: limitOption.default,
		description: limitOption.description,
		displayOptions: {
			show: {
				resource: ['cluster'],
				operation: ['getResources', 'getTasks', 'getNodes'],
				returnAll: [false],
			},
		},
	},

	// Get Tasks fields
	{
		displayName: 'Running Only',
		name: 'runningOnly',
		type: 'boolean',
		default: false,
		description: 'Show only running tasks',
		displayOptions: {
			show: {
				resource: ['cluster'],
				operation: ['getTasks'],
			},
		},
	},

	// Additional options for various operations
	{
		displayName: 'Additional Fields',
		name: 'additionalFields',
		type: 'collection',
		placeholder: 'Add Field',
		default: {},
		displayOptions: {
			show: {
				resource: ['cluster'],
				operation: ['getTasks', 'getResources'],
			},
		},
		options: [
			{
				displayName: 'Node',
				name: 'node',
				type: 'string',
				default: '',
				description: 'Filter by specific node',
			},
			{
				displayName: 'VM ID',
				name: 'vmid',
				type: 'number',
				default: '',
				description: 'Filter by specific VM/Container ID',
			},
			{
				displayName: 'User',
				name: 'user',
				type: 'string',
				default: '',
				description: 'Filter by user who started the task',
			},
		],
	},
];
