import { INodeProperties } from 'n8n-workflow';

export const alertsOperations: INodeProperties[] = [
	{
		displayName: 'Operation',
		name: 'operation',
		type: 'options',
		noDataExpression: true,
		displayOptions: {
			show: {
				resource: ['alerts'],
			},
		},
		options: [
			{
				name: 'Get All',
				value: 'getAll',
				description: 'Get all alerts',
				action: 'Get all alerts',
				routing: {
					request: {
						method: 'GET',
						url: '/alerts',
					},
					output: {
						postReceive: [
							{
								type: 'rootProperty',
								properties: {
									property: 'alerts',
								},
							},
						],
					},
				},
			},
			{
				name: 'Get',
				value: 'get',
				description: 'Get an alert by ID',
				action: 'Get an alert',
				routing: {
					request: {
						method: 'GET',
						url: '=/alerts/{{$parameter.alertId}}',
					},
					output: {
						postReceive: [
							{
								type: 'rootProperty',
								properties: {
									property: 'alerts',
								},
							},
						],
					},
				},
			},
			{
				name: 'Acknowledge',
				value: 'acknowledge',
				description: 'Acknowledge an alert',
				action: 'Acknowledge an alert',
				routing: {
					request: {
						method: 'PUT',
						url: '=/alerts/{{$parameter.alertId}}',
					},
					send: {
						type: 'body',
					},
				},
			},
			{
				name: 'Unmute',
				value: 'unmute',
				description: 'Unmute an alert',
				action: 'Unmute an alert',
				routing: {
					request: {
						method: 'PUT',
						url: '=/alerts/unmute/{{$parameter.alertId}}',
					},
				},
			},
		],
		default: 'getAll',
	},
];

export const alertsFields: INodeProperties[] = [
	// Alert ID for specific operations
	{
		displayName: 'Alert ID',
		name: 'alertId',
		type: 'string',
		required: true,
		displayOptions: {
			show: {
				resource: ['alerts'],
				operation: ['get', 'acknowledge', 'unmute'],
			},
		},
		default: '',
		description: 'The alert ID',
	},

	// Acknowledge options
	{
		displayName: 'Acknowledge Options',
		name: 'ackOptions',
		type: 'collection',
		placeholder: 'Add Option',
		default: {},
		displayOptions: {
			show: {
				resource: ['alerts'],
				operation: ['acknowledge'],
			},
		},
		options: [
			{
				displayName: 'Note',
				name: 'note',
				type: 'string',
				default: '',
				description: 'Note to add to the alert',
			},
			{
				displayName: 'Until Clear',
				name: 'until_clear',
				type: 'boolean',
				default: true,
				description: 'Whether to re-alert if it gets worse/better or changes',
			},
		],
	},

	// Filters for getAll
	{
		displayName: 'Filters',
		name: 'filters',
		type: 'collection',
		placeholder: 'Add Filter',
		default: {},
		displayOptions: {
			show: {
				resource: ['alerts'],
				operation: ['getAll'],
			},
		},
		options: [
			{
				displayName: 'State',
				name: 'state',
				type: 'options',
				options: [
					{ name: 'OK', value: '0' },
					{ name: 'Alert', value: '1' },
					{ name: 'Acknowledged', value: '2' },
				],
				default: '',
				description: 'Filter alerts by state',
				routing: {
					send: {
						type: 'query',
						property: 'state',
					},
				},
			},
			{
				displayName: 'Severity',
				name: 'severity',
				type: 'options',
				options: [
					{ name: 'OK', value: 'ok' },
					{ name: 'Warning', value: 'warning' },
					{ name: 'Critical', value: 'critical' },
				],
				default: '',
				description: 'Filter alerts by severity',
				routing: {
					send: {
						type: 'query',
						property: 'severity',
					},
				},
			},
			{
				displayName: 'Alert Rule ID',
				name: 'alert_rule',
				type: 'string',
				default: '',
				description: 'Filter by alert rule ID',
				routing: {
					send: {
						type: 'query',
						property: 'alert_rule',
					},
				},
			},
			{
				displayName: 'Order',
				name: 'order',
				type: 'string',
				default: '',
				placeholder: 'timestamp DESC',
				description: 'Order results',
				routing: {
					send: {
						type: 'query',
						property: 'order',
					},
				},
			},
		],
	},
];
