import { INodeProperties } from 'n8n-workflow';
import { addDescriptions } from '../../../helpers/deduplicate';
import { listSitesDescription } from './operations/listSites.descriptions';
import { createSiteDescription } from './operations/createSite.descriptions';
import { getSiteDetailsDescription } from './operations/getSiteDetails.descriptions';
import { updateSiteDescription } from './operations/updateSite.descriptions';
import { associateSiteToDeviceDescription } from './operations/associateSiteToDevice.descriptions';
import { unassociateSiteFromDeviceDescription } from './operations/unassociateSiteFromDevice.descriptions';
import { associateSiteToDevicesDescription } from './operations/associateSiteToDevices.descriptions';
import { unassociateSiteFromDevicesDescription } from './operations/unassociateSiteFromDevices.descriptions';

/**
 * Operation selector for the site resource
 */
export const siteOperationSelector: INodeProperties = {
	displayName: 'Operation',
	name: 'operation',
	type: 'options',
	noDataExpression: true,
	displayOptions: {
		show: {
			resource: ['site'],
			domain: ['monitoring'],
		},
	},
	options: [
		{
			name: 'List Sites',
			value: 'listSites',
			description: 'Get a list of all sites',
			action: 'List sites',
		},
		{
			name: 'Create Site',
			value: 'createSite',
			description: 'Create a new site',
			action: 'Create site',
		},
		{
			name: 'Get Site Details',
			value: 'getSiteDetails',
			description: 'Get details of a specific site',
			action: 'Get site details',
		},
		{
			name: 'Update Site',
			value: 'updateSite',
			description: 'Update a site',
			action: 'Update site',
		},
		{
			name: 'Associate Site to Device',
			value: 'associateSiteToDevice',
			description: 'Associate a site to a device',
			action: 'Associate site to device',
		},
		{
			name: 'Unassociate Site from Device',
			value: 'unassociateSiteFromDevice',
			description: 'Remove a site association from a device',
			action: 'Unassociate site from device',
		},
		{
			name: 'Associate Site to Devices',
			value: 'associateSiteToDevices',
			description: 'Associate a site to multiple devices',
			action: 'Associate site to devices',
		},
		{
			name: 'Unassociate Site from Devices',
			value: 'unassociateSiteFromDevices',
			description: 'Remove a site association from multiple devices',
			action: 'Unassociate site from devices',
		},
	],
	default: 'listSites',
};

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

// Add each operation's descriptions
addDescriptions(siteDescriptions, listSitesDescription);
addDescriptions(siteDescriptions, createSiteDescription);
addDescriptions(siteDescriptions, getSiteDetailsDescription);
addDescriptions(siteDescriptions, updateSiteDescription);
addDescriptions(siteDescriptions, associateSiteToDeviceDescription);
addDescriptions(siteDescriptions, unassociateSiteFromDeviceDescription);
addDescriptions(siteDescriptions, associateSiteToDevicesDescription);
addDescriptions(siteDescriptions, unassociateSiteFromDevicesDescription);
