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

export const formOperations = [
	{
		displayName: 'Operation',
		name: 'operation',
		type: 'options',
		displayOptions: {
			show: {
				resource: [
					'form',
				],
			},
		},
		options: [
			{
				name: 'Get Fields',
				value: 'getFields',
				description: 'Get all fields from a form',
			},
			{
				name: 'Submit',
				value: 'submit',
				description: 'Submit data to a form',
			},
		],
		default: 'getFields',
		description: 'The operation to perform.',
	},
] as INodeProperties[];

export const formFields = [

	/* -------------------------------------------------------------------------- */
	/*                                form:submit                                 */
	/* -------------------------------------------------------------------------- */
	{
		displayName: 'Form',
		name: 'formId',
		type: 'options',
		typeOptions: {
			loadOptionsMethod: 'getForms',
		},
		required: true,
		displayOptions: {
			show: {
				resource: [
					'form',
				],
				operation: [
					'submit',
				],
			},
		},
		default: '',
		description: `The ID of the form you're sending data to.`,
	},
	{
		displayName: 'Additional Fields',
		name: 'additionalFields',
		type: 'collection',
		placeholder: 'Add Field',
		default: {},
		displayOptions: {
			show: {
				resource: [
					'form',
				],
				operation: [
					'submit',
				],
			},
		},
		options: [
			{
				displayName: 'Skip Validation',
				name: 'skipValidation',
				type: 'boolean',
				default: false,
				description: `Whether or not to skip validation based on the form settings.`,
			},
			{
				displayName: 'Submitted At',
				name: 'submittedAt',
				type: 'dateTime',
				default: '',
				description: 'Time of the form submission.',
			},
		],
	},
	{
		displayName: 'Context',
		name: 'contextUi',
		placeholder: 'Add Context',
		type: 'fixedCollection',
		typeOptions: {
			multipleValues: false,
		},
		displayOptions: {
			show: {
				resource: [
					'form',
				],
				operation: [
					'submit',
				],
			},
		},
		default: {},
		options: [
			{
				displayName: 'Context',
				name: 'contextValue',
				values: [
					{
						displayName: 'HubSpot usertoken',
						name: 'hutk',
						type: 'string',
						default: '',
						description: 'Include this parameter and set it to the hubspotutk cookie value to enable cookie tracking on your submission',
					},
					{
						displayName: 'IP Address',
						name: 'ipAddress',
						type: 'string',
						default: '',
						description: 'The IP address of the visitor filling out the form.',
					},
					{
						displayName: 'Page URI',
						name: 'pageUri',
						type: 'string',
						default: '',
						description: 'The URI of the page the submission happened on.',
					},
					{
						displayName: 'Page Name',
						name: 'pageName',
						type: 'string',
						default: '',
						description: 'The name or title of the page the submission happened on.',
					},
					{
						displayName: 'Page ID',
						name: 'pageId',
						type: 'string',
						default: '',
						description: 'The ID of a page created on the HubSpot CMS.',
					},
					{
						displayName: 'SFDC campaign ID',
						name: 'sfdcCampaignId',
						type: 'string',
						default: '',
						description: `If the form is for an account using the HubSpot Salesforce Integration,</br>
						you can include the ID of a Salesforce campaign to add the contact to the specified campaign.`,
					},
					{
						displayName: 'Go to Webinar Webinar ID',
						name: 'goToWebinarWebinarKey',
						type: 'string',
						default: '',
						description: `If the form is for an account using the HubSpot GoToWebinar Integration,</br>
						you can include the ID of a webinar to enroll the contact in that webinar when they submit the form.`,
					},
				],
			},
		],
	},
	{
		displayName: 'Legal Consent',
		name: 'lengalConsentUi',
		placeholder: 'Add Legal Consent',
		type: 'fixedCollection',
		typeOptions: {
			multipleValues: false,
		},
		displayOptions: {
			show: {
				resource: [
					'form',
				],
				operation: [
					'submit',
				],
			},
		},
		default: {},
		options: [
			{
				displayName: 'Consent',
				name: 'lengalConsentValues',
				values: [
					{
						displayName: 'Consent To Process',
						name: 'consentToProcess',
						type: 'boolean',
						default: false,
						description: 'Whether or not the visitor checked the Consent to process checkbox',
					},
					{
						displayName: 'Text',
						name: 'text',
						type: 'string',
						default: '',
						description: 'The text displayed to the visitor for the Consent to process checkbox',
					},
					{
						displayName: 'Communications',
						name: 'communicationsUi',
						placeholder: 'Add Communication',
						type: 'fixedCollection',
						typeOptions: {
							multipleValues: true,
						},
						default: {},
						options: [
							{
								displayName: 'Communication',
								name: 'communicationValues',
								values: [
									{
										displayName: 'Subcription Type',
										name: 'subscriptionTypeId',
										type: 'options',
										typeOptions: {
											loadOptionsMethod: 'getSubscriptionTypes',
										},
										default: '',
										description: 'The ID of the specific subscription type',
									},
									{
										displayName: 'Value',
										name: 'value',
										type: 'boolean',
										default: false,
										description: ' Whether or not the visitor checked the checkbox for this subscription type.',
									},
									{
										displayName: 'Text',
										name: 'text',
										type: 'string',
										default: '',
										description: 'The text displayed to the visitor for this specific subscription checkbox',
									},
								],
							},
						],
					},
				],
			},
			{
				displayName: 'Legitimate Interest',
				name: 'legitimateInterestValues',
				values: [
					{
						displayName: 'Subcription Type',
						name: 'subscriptionTypeId',
						type: 'options',
						typeOptions: {
							loadOptionsMethod: 'getSubscriptionTypes',
						},
						default: '',
						description: 'The ID of the specific subscription type that this forms indicates interest to.',
					},
					{
						displayName: 'Value',
						name: 'value',
						type: 'boolean',
						default: false,
						description: `This must be true when using the 'legitimateInterest' option, as it reflects</br>
						the consent indicated by the visitor when submitting the form`,
					},
					{
						displayName: 'Legal Basis',
						name: 'legalBasis',
						type: 'options',
						options: [
							{
								name: 'Customer',
								value: 'CUSTOMER',
							},
							{
								name: 'Lead',
								value: 'LEAD',
							},
						],
						default: '',
						description: 'The privacy text displayed to the visitor.',
					},
					{
						displayName: 'Text',
						name: 'text',
						type: 'string',
						default: '',
						description: 'The privacy text displayed to the visitor.',
					},
				],
			},
		],
	},

	/* -------------------------------------------------------------------------- */
	/*                                  form:getFields                            */
	/* -------------------------------------------------------------------------- */
	{
		displayName: 'Form',
		name: 'formId',
		type: 'options',
		typeOptions: {
			loadOptionsMethod: 'getForms',
		},
		required: true,
		displayOptions: {
			show: {
				resource: [
					'form',
				],
				operation: [
					'getFields',
				],
			},
		},
		default: '',
		description: 'The ID of the form',
	},
] as INodeProperties[];