/**
 * @readonly
 * @enum
 */
export const SMTPErrorStates = {
	COULDNOTCONNECT: 1,
	BADRESPONSE: 2,
	AUTHFAILED: 3,
	TIMEDOUT: 4,
	ERROR: 5,
	NOCONNECTION: 6,
	AUTHNOTSUPPORTED: 7,
	CONNECTIONCLOSED: 8,
	CONNECTIONENDED: 9,
	CONNECTIONAUTH: 10,
} as const;

class SMTPError extends Error {
	public code: number | null = null;
	public smtp: unknown = null;
	public previous: Error | null = null;

	constructor(message: string) {
		super(message);
	}
}

export function makeSMTPError(
	message: string,
	code: number,
	error?: Error | null,
	smtp?: unknown
) {
	const msg = error?.message ? `${message} (${error.message})` : message;
	const err = new SMTPError(msg);

	err.code = code;
	err.smtp = smtp;

	if (error) {
		err.previous = error;
	}

	return err;
}
