import type { INodeProperties } from 'n8n-workflow';

const checkoutStartedIdentifier: INodeProperties[] = [
	{
		displayName: 'Identifier',
		name: 'identifierCheckoutStarted',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: ['ecommerceCheckoutStarted'],
			},
		},
		default: '',
		description: 'Checkout identifier',
		required: true,
	}
];

const cartAbandonedIdentifier: INodeProperties[] = [
	{
		displayName: 'Identifier',
		name: 'identifierCartAbandoned',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: ['ecommerceCartAbandoned'],
			},
		},
		default: '',
		description: 'Cart identifier',
		required: true,
	}
];

const orderIdentifier: INodeProperties[] = [
	{
		displayName: 'Identifier',
		name: 'identifierOrder',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: [
					'ecommerceOrderPlaced',
					'ecommerceOrderPaid',
					'ecommerceOrderCancelled',
					'ecommerceOrderRefunded',
				],
			},
		},
		default: '',
		description: 'Order identifier',
		required: true,
	}
];

const shipmentIdentifier: INodeProperties[] = [
	{
		displayName: 'Identifier',
		name: 'identifierShipment',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: [
					'ecommerceOrderFulfilled',
					'ecommerceShipmentDelivered',
				],
			},
		},
		default: '',
		description: 'Shipment identifier',
		required: true,
	}
];

const cartIdentifier: INodeProperties[] = [
	{
		displayName: 'Cart Identifier',
		name: 'cartIdentifier',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: [
					'ecommerceOrderPlaced',
				],
			},
		},
		default: '',
		// eslint-disable-next-line n8n-nodes-base/node-param-description-identical-to-display-name
		description: 'Cart identifier',
	}
];

const checkoutIdentifier: INodeProperties[] = [
	{
		displayName: 'Checkout Identifier',
		name: 'checkoutIdentifier',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: [
					'ecommerceOrderPlaced',
				],
			},
		},
		default: '',
		// eslint-disable-next-line n8n-nodes-base/node-param-description-identical-to-display-name
		description: 'Checkout identifier',
	}
];

const orderIdentifierExplicit: INodeProperties[] = [
	{
		displayName: 'Order Identifier',
		name: 'orderIdentifierExplicit',
		type: 'string',
		displayOptions: {
			show: {
				operation: ['newEcommerceEvent'],
				resource: ['ecommerceEvents'],
				eventType: [
					'ecommerceOrderFulfilled',
					'ecommerceShipmentDelivered',
				],
			},
		},
		default: '',
		description: 'Order identifier for order fulfilled and shipment delivered events',
		required: true,
	}
];

export const ecommerceIdentifiers: INodeProperties[] = [
	...checkoutStartedIdentifier,
	...cartAbandonedIdentifier,
	...orderIdentifier,
	...shipmentIdentifier,
];

export const orderPlacedIdentifiers: INodeProperties[] = [
	...cartIdentifier,
	...checkoutIdentifier,
];

export const orderExplicitIdentifiers: INodeProperties[] = [
	...orderIdentifierExplicit,
];
