'use node';

import { action } from '../_generated/server';
import { v } from 'convex/values';

// Importar nodemailer de forma estática para evitar problemas com caminhos no Windows
import nodemailer from 'nodemailer';

export const testarConexao = action({
	args: {
		servidor: v.string(),
		porta: v.number(),
		usuario: v.string(),
		senha: v.string(),
		usarSSL: v.boolean(),
		usarTLS: v.boolean()
	},
	returns: v.union(
		v.object({ sucesso: v.literal(true) }),
		v.object({ sucesso: v.literal(false), erro: v.string() })
	),
	handler: async (ctx, args) => {
		try {
			// Validações básicas
			if (!args.servidor || args.servidor.trim() === '') {
				return {
					sucesso: false as const,
					erro: 'Servidor SMTP não pode estar vazio'
				};
			}

			if (args.porta < 1 || args.porta > 65535) {
				return { sucesso: false as const, erro: 'Porta inválida' };
			}

			const transporter = nodemailer.createTransport({
				host: args.servidor,
				port: args.porta,
				secure: args.usarSSL,
				auth: {
					user: args.usuario,
					pass: args.senha
				},
				tls: {
					rejectUnauthorized: false
				},
				connectionTimeout: 10000, // 10 segundos
				greetingTimeout: 10000,
				socketTimeout: 10000
			});

			// Verificar conexão
			await transporter.verify();

			return { sucesso: true as const };
		} catch (error) {
			const errorMessage = error instanceof Error ? error.message : String(error);
			return { sucesso: false as const, erro: errorMessage };
		}
	}
});
