<?php
/**
 * @package Hafenstudios\Core
 */

namespace Hafenstudios\Core\Mail\Driver;

use Hafenstudios\Core\Mail\MailDriver;
use Hafenstudios\Core\Mail\Message;

defined( 'ABSPATH' ) || exit;

/**
 * Standard-Treiber ueber wp_mail(). Geeignet fuer Transaktionsmails und
 * Kleinstlisten. Hans weist im Onboarding ehrlich auf Hosting-Limits hin
 * (BAUPLAN Abschnitt 25).
 */
final class WpMailDriver implements MailDriver {

	public function key(): string {
		return 'wp_mail';
	}

	public function send( Message $message ): bool {
		// Multipart-Alternative: liegt ein Klartext-Body vor, wird er ueber einen
		// eigenen phpmailer_init-Hook als AltBody gesetzt. Der Hook wird nur fuer
		// GENAU diese Mail registriert und direkt danach wieder entfernt, damit
		// kein AltBody an eine spaetere Mail durchsickert (kein Global-Leak).
		$alt = $message->text_body;
		if ( '' === $alt || ! $message->is_html ) {
			return wp_mail(
				$message->to,
				$message->subject,
				$message->body,
				$message->build_headers()
			);
		}

		$set_alt = static function ( $phpmailer ) use ( $alt ) {
			$phpmailer->AltBody = $alt;
		};
		add_action( 'phpmailer_init', $set_alt, 20 );
		$ok = wp_mail( $message->to, $message->subject, $message->body, $message->build_headers() );
		remove_action( 'phpmailer_init', $set_alt, 20 );

		return $ok;
	}
}
