import { test, expect } from '../../../fixtures/base';

test.use({ capability: 'email' });

test(
	'EmailSend node sends via SMTP @capability:email',
	{
		annotation: [{ type: 'owner', description: 'NODES' }],
	},
	async ({ api, n8n, services }) => {
		// Sign in to use internal APIs for creating credentials and workflows
		const mailpit = services.mailpit;

		// Create SMTP credential targeting Mailpit (uses internal hostname in container mode, localhost in local mode)
		const smtpCredential = await api.credentials.createCredential({
			name: 'SMTP (Test)',
			type: 'smtp',
			data: {
				user: '',
				password: '',
				host: mailpit.smtpHost,
				port: mailpit.smtpPort,
				secure: false,
				disableStartTls: true,
			},
		});

		// Define a workflow with Manual Trigger -> EmailSend
		const toEmail = 'test@recipient.local';
		const subject = 'Playwright Mailpit SMTP';
		const workflowDefinition = {
			name: 'Mailpit EmailSend Workflow',
			nodes: [
				{
					id: '1',
					name: 'Manual Trigger',
					type: 'n8n-nodes-base.manualTrigger',
					typeVersion: 1,
					position: [0, 0],
				},
				{
					id: '2',
					name: 'Email',
					type: 'n8n-nodes-base.emailSend',
					typeVersion: 2,
					position: [300, 0],
					parameters: {
						fromEmail: 'test@n8n.local',
						toEmail,
						subject,
						emailFormat: 'text',
						text: 'Hello from n8n E2E test',
					},
					credentials: {
						smtp: {
							id: smtpCredential.id,
							name: smtpCredential.name,
						},
					},
				},
			],
			connections: {
				'Manual Trigger': {
					main: [[{ node: 'Email', type: 'main', index: 0 }]],
				},
			},
			active: false,
		} as const;

		const { workflowId } = await api.workflows.createWorkflowFromDefinition(
			// eslint-disable-next-line @typescript-eslint/no-explicit-any
			workflowDefinition as any,
			{ makeUnique: true },
		);

		// Execute the workflow via UI API endpoint by navigating to the canvas and clicking run
		await n8n.page.goto(`/workflow/${workflowId}`);
		await n8n.workflowComposer.executeWorkflowAndWaitForNotification(
			'Workflow executed successfully',
		);

		const msg = await mailpit.waitForMessage({ to: toEmail, subject });

		expect(msg).toBeTruthy();
	},
);
