<?php
/**
 * Admin page: Email Settings
 *
 * Ustawienia powiadomień email dla KSeF.
 *
 * @package KSEF\WordPress\Admin
 */

namespace KSEF\WordPress\Admin;

/**
 * Email_Settings
 *
 * Obsługuje:
 * - Enable/disable notyfikacji
 * - Recipient email
 * - Notification types (errors, circuit breaker, confirmed)
 * - Rate limiting
 */
class Email_Settings {

	/**
	 * Renderuj stronę
	 *
	 * @return void
	 */
	public function render_page() {
		// Sprawdź uprawnienia
		if ( ! current_user_can( 'ksef_view_settings' ) ) {
			wp_die( esc_html__( 'Brak uprawnień.', 'prostafaktura-ksef' ) );
		}

		// Obsłuż POST
		if ( 'POST' === sanitize_text_field( wp_unslash( $_SERVER['REQUEST_METHOD'] ?? '' ) ) ) {
			$this->handle_post();
		}

		// Pobierz ustawienia
		$enabled            = get_option( 'gksef_email_notifications_enabled', 1 );
		$recipient          = get_option( 'gksef_email_recipient' );
		$notify_errors      = get_option( 'gksef_email_notify_errors', 1 );
		$notify_cb          = get_option( 'gksef_email_notify_circuit_breaker', 1 );
		$notify_confirmed   = get_option( 'gksef_email_notify_confirmed', 0 );
		$rate_limit_minutes = get_option( 'gksef_email_rate_limit_minutes', 10 );

		// Auto-wysyłka faktur do klienta (domyślnie WŁĄCZONA).
		require_once KSEF_WORDPRESS_PATH . 'includes/class-invoice-pdf.php';
		$auto_email_enabled = get_option( 'gksef_auto_email_enabled', 1 );
		$is_pro = true; // wersja darmowa: automatyczna wysyłka faktur e-mailem odblokowana.
		$auto_email_subject = (string) get_option( 'gksef_auto_email_subject', '' );
		$auto_email_body    = (string) get_option( 'gksef_auto_email_body', '' );
		if ( '' === $auto_email_subject ) {
			$auto_email_subject = \KSEF\WordPress\Invoice_PDF::default_email_subject();
		}
		if ( '' === $auto_email_body ) {
			$auto_email_body = \KSEF\WordPress\Invoice_PDF::default_email_body();
		}

		?>
		<div>

			<form method="post" class="ksef-settings-form">
				<?php wp_nonce_field( 'ksef_email_settings_nonce' ); ?>

				<div class="settings-section">
					<h2><?php esc_html_e( 'Powiadomienia Email', 'prostafaktura-ksef' ); ?></h2>

					<!-- Enable/Disable -->
					<div class="setting-row">
						<label>
							<input type="checkbox" name="enabled" value="1" <?php checked( $enabled, 1 ); ?>>
							<?php esc_html_e( 'Włącz powiadomienia email', 'prostafaktura-ksef' ); ?>
						</label>
						<p class="description"><?php esc_html_e( 'Wyłącz aby nie otrzymywać powiadomień o błędach KSeF.', 'prostafaktura-ksef' ); ?></p>
					</div>

					<!-- Recipient -->
					<div class="setting-row">
						<label for="recipient"><?php esc_html_e( 'Adres email odbiorcy', 'prostafaktura-ksef' ); ?></label>
						<input type="email" id="recipient" name="recipient" value="<?php echo esc_attr( $recipient ); ?>" placeholder="<?php echo esc_attr( get_option( 'admin_email' ) ); ?>">
						<p class="description"><?php esc_html_e( 'Jeśli puste, powiadomienia będą wysyłane na email administratora.', 'prostafaktura-ksef' ); ?></p>
					</div>

					<!-- Notification Types -->
					<fieldset>
						<legend><?php esc_html_e( 'Typy powiadomień', 'prostafaktura-ksef' ); ?></legend>

						<div class="setting-row">
							<label>
								<input type="checkbox" name="notify_errors" value="1" <?php checked( $notify_errors, 1 ); ?>>
								<?php esc_html_e( '🔴 Błędy synchronizacji', 'prostafaktura-ksef' ); ?>
							</label>
							<p class="description"><?php esc_html_e( 'Powiadomienie gdy synchronizacja się nie uda.', 'prostafaktura-ksef' ); ?></p>
						</div>

						<div class="setting-row">
							<label>
								<input type="checkbox" name="notify_cb" value="1" <?php checked( $notify_cb, 1 ); ?>>
								<?php esc_html_e( '⚠️ Circuit Breaker open', 'prostafaktura-ksef' ); ?>
							</label>
							<p class="description"><?php esc_html_e( 'Powiadomienie gdy circuit breaker się otworzy.', 'prostafaktura-ksef' ); ?></p>
						</div>

						<div class="setting-row">
							<label>
								<input type="checkbox" name="notify_confirmed" value="1" <?php checked( $notify_confirmed, 1 ); ?>>
								<?php esc_html_e( '✅ Faktury potwierdzone', 'prostafaktura-ksef' ); ?>
							</label>
							<p class="description"><?php esc_html_e( 'Powiadomienie gdy faktura zostanie potwierdzona przez KSeF.', 'prostafaktura-ksef' ); ?></p>
						</div>
					</fieldset>

					<!-- Rate Limiting -->
					<div class="setting-row">
						<label for="rate_limit"><?php esc_html_e( 'Rate limit (minuty)', 'prostafaktura-ksef' ); ?></label>
						<input type="number" id="rate_limit" name="rate_limit_minutes" value="<?php echo esc_attr( $rate_limit_minutes ); ?>" min="1" max="1440">
						<p class="description"><?php esc_html_e( 'Maksymalnie jedno powiadomienie na kredencjał w wybranym interwale (aby uniknąć spamu).', 'prostafaktura-ksef' ); ?></p>
					</div>
				</div>

				<div class="settings-section">
					<h2><?php esc_html_e( 'Automatyczna wysyłka faktur do klienta', 'prostafaktura-ksef' ); ?></h2>

					<div class="setting-row">
						<label>
							<input type="checkbox" name="auto_email_enabled" value="1" <?php checked( $auto_email_enabled, 1 ); ?>>
							<?php esc_html_e( 'Wysyłaj fakturę na email klienta automatycznie po wystawieniu', 'prostafaktura-ksef' ); ?>
						</label>
						<p class="description"><?php esc_html_e( 'Po pomyślnym wysłaniu faktury do KSeF klient dostanie ją mailem (ładny HTML + wersja tekstowa, z PDF w załączniku). Wysyłka tylko gdy znamy email nabywcy.', 'prostafaktura-ksef' ); ?></p>
					</div>

					<div class="setting-row">
						<label for="auto_email_subject"><?php esc_html_e( 'Temat wiadomości', 'prostafaktura-ksef' ); ?></label>
						<input type="text" id="auto_email_subject" name="auto_email_subject" value="<?php echo esc_attr( $auto_email_subject ); ?>">
					</div>

					<div class="setting-row">
						<label for="auto_email_body"><?php esc_html_e( 'Treść wiadomości', 'prostafaktura-ksef' ); ?></label>
						<textarea id="auto_email_body" name="auto_email_body" rows="7" style="width:100%;max-width:560px;padding:8px;border:1px solid #ddd;border-radius:4px;font-family:inherit;"><?php echo esc_textarea( $auto_email_body ); ?></textarea>
						<p class="description">
							<?php esc_html_e( 'Dostępne zmienne:', 'prostafaktura-ksef' ); ?>
							<code>{numer}</code> <code>{kwota}</code> <code>{termin}</code> <code>{ksef}</code> <code>{data}</code> <code>{nabywca}</code> <code>{sprzedawca}</code>.
							<?php esc_html_e( 'Pusty wiersz = nowy akapit. Treść jest wstawiana do estetycznego szablonu HTML.', 'prostafaktura-ksef' ); ?>
						</p>
					</div>
				</div>

				<div class="settings-section">
					<h2><?php esc_html_e( 'Metoda wysyłki', 'prostafaktura-ksef' ); ?></h2>
					<?php
					$smtp_active = self::detect_smtp_plugin();
					if ( $smtp_active ) :
						?>
						<p>
							<strong style="color:#16a34a;">&#10003; <?php esc_html_e( 'Wykryto zewnętrzny moduł SMTP', 'prostafaktura-ksef' ); ?></strong>
							— <?php echo esc_html( $smtp_active ); ?>.
							<?php esc_html_e( 'Wszystkie wiadomości KSeF będą wysyłane przez ten serwer SMTP.', 'prostafaktura-ksef' ); ?>
						</p>
					<?php else : ?>
						<p>
							<strong><?php esc_html_e( 'Wbudowana poczta WordPress (PHP mail)', 'prostafaktura-ksef' ); ?></strong>
							— <?php esc_html_e( 'wiadomości wysyłane tak samo jak standardowe powiadomienia WordPress.', 'prostafaktura-ksef' ); ?>
						</p>
						<p class="description">
							<?php esc_html_e( 'Aby wysyłać przez SMTP, zainstaluj dowolną wtyczkę SMTP (np. WP Mail SMTP, FluentSMTP) — KSeF automatycznie z niej skorzysta. Osobna konfiguracja tutaj nie jest potrzebna.', 'prostafaktura-ksef' ); ?>
						</p>
					<?php endif; ?>
				</div>

				<div class="settings-section">
					<h2><?php esc_html_e( 'Test powiadomienia', 'prostafaktura-ksef' ); ?></h2>

					<p><?php esc_html_e( 'Wyślij testowy email aby sprawdzić czy powiadomienia działają:', 'prostafaktura-ksef' ); ?></p>

					<button type="button" class="button ksef-send-test-email">
						<?php esc_html_e( 'Wyślij testowy email', 'prostafaktura-ksef' ); ?>
					</button>

					<p class="description"><?php esc_html_e( 'Testowy email zostanie wysłany na adres wybrany powyżej.', 'prostafaktura-ksef' ); ?></p>
				</div>

				<div class="form-actions">
					<button type="submit" class="button button-primary">
						<?php esc_html_e( 'Zapisz ustawienia', 'prostafaktura-ksef' ); ?>
					</button>
				</div>
			</form>
		</div>

		<?php ob_start(); ?>
			.ksef-settings-form {
				max-width: 600px;
			}
			.settings-section {
				background: white;
				border: 1px solid #ddd;
				border-radius: 4px;
				padding: 20px;
				margin-bottom: 20px;
			}
			.settings-section h2 {
				margin-top: 0;
				border-bottom: 2px solid #0073aa;
				padding-bottom: 10px;
			}
			.setting-row {
				margin-bottom: 20px;
			}
			.setting-row label {
				display: block;
				margin-bottom: 8px;
				font-weight: bold;
			}
			.setting-row input[type="text"],
			.setting-row input[type="email"],
			.setting-row input[type="number"],
			.setting-row select {
				width: 100%;
				max-width: 400px;
				padding: 8px;
				border: 1px solid #ddd;
				border-radius: 4px;
			}
			.setting-row input[type="checkbox"] {
				margin-right: 8px;
			}
			.description {
				color: #666;
				font-size: 12px;
				margin-top: 5px;
			}
			fieldset {
				border: 1px solid #ddd;
				border-radius: 4px;
				padding: 15px;
				margin: 15px 0;
			}
			legend {
				padding: 0 10px;
				font-weight: bold;
			}
			.form-actions {
				margin-top: 30px;
			}
			.form-actions button {
				margin-right: 10px;
			}
		<?php Modern_Shell::inline_style( 'ksef-email-settings', ob_get_clean() ); ob_start(); ?>
			jQuery(function($) {
				$('.ksef-send-test-email').on('click', function(e) {
					e.preventDefault();

					var $btn = $(this);
					$btn.prop('disabled', true).text('Wysyłanie...');

					$.ajax({
						url: ajaxurl,
						type: 'POST',
						data: {
							action: 'ksef_send_test_email',
							nonce: '<?php echo esc_js( wp_create_nonce( 'ksef-nonce' ) ); ?>'
						},
						success: function(response) {
							if (response.success) {
								alert('Testowy email wysłany pomyślnie!');
							} else {
								alert('Błąd: ' + response.data);
							}
							$btn.prop('disabled', false).text('Wyślij testowy email');
						},
						error: function() {
							alert('Błąd komunikacji z serwerem.');
							$btn.prop('disabled', false).text('Wyślij testowy email');
						}
					});
				});
			});
		<?php Modern_Shell::inline_script( 'ksef-email-settings', ob_get_clean(), [ 'jquery' ] ); ?>
		<?php
	}

	/**
	 * Wykrywa aktywną wtyczkę SMTP. Zwraca nazwę lub '' jeśli brak.
	 */
	private static function detect_smtp_plugin(): string {
		$known = [
			'wp-mail-smtp/wp_mail_smtp.php'         => 'WP Mail SMTP',
			'fluent-smtp/fluent-smtp.php'           => 'FluentSMTP',
			'post-smtp/postman-smtp.php'            => 'Post SMTP',
			'easy-wp-smtp/easy-wp-smtp.php'         => 'Easy WP SMTP',
			'smtp-mailer/main.php'                  => 'SMTP Mailer',
			'wp-smtp/wp-smtp.php'                   => 'WP SMTP',
			'gmail-smtp/main.php'                   => 'Gmail SMTP',
		];
		if ( ! function_exists( 'is_plugin_active' ) ) {
			require_once ABSPATH . 'wp-admin/includes/plugin.php';
		}
		foreach ( $known as $file => $label ) {
			if ( is_plugin_active( $file ) ) {
				return $label;
			}
		}
		// Generyczna detekcja — ktoś podpiął się pod hook phpmailer/pre_wp_mail.
		if ( has_filter( 'pre_wp_mail' ) || has_action( 'phpmailer_init' ) ) {
			return __( 'zewnętrzny moduł SMTP', 'prostafaktura-ksef' );
		}
		return '';
	}

	/**
	 * Obsłuż POST request
	 *
	 * @return void
	 */
	private function handle_post() {
		// Verify nonce
		if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['_wpnonce'] ) ), 'ksef_email_settings_nonce' ) ) {
			wp_die( esc_html__( 'Security check failed.', 'prostafaktura-ksef' ) );
		}

		// Pobierz wartości
		$enabled            = isset( $_POST['enabled'] ) ? 1 : 0;
		$recipient          = isset( $_POST['recipient'] ) ? sanitize_email( wp_unslash( $_POST['recipient'] ) ) : '';
		$notify_errors      = isset( $_POST['notify_errors'] ) ? 1 : 0;
		$notify_cb          = isset( $_POST['notify_cb'] ) ? 1 : 0;
		$notify_confirmed   = isset( $_POST['notify_confirmed'] ) ? 1 : 0;
		$rate_limit_minutes = intval( $_POST['rate_limit_minutes'] ?? 10 );

		// Auto-wysyłka faktur do klienta
		$auto_email_enabled = isset( $_POST['auto_email_enabled'] ) ? 1 : 0;
		$auto_email_subject = isset( $_POST['auto_email_subject'] ) ? sanitize_text_field( wp_unslash( $_POST['auto_email_subject'] ) ) : '';
		$auto_email_body    = isset( $_POST['auto_email_body'] ) ? sanitize_textarea_field( wp_unslash( $_POST['auto_email_body'] ) ) : '';

		// Zapisz do wp_options
		update_option( 'gksef_email_notifications_enabled', $enabled );
		update_option( 'gksef_email_recipient', $recipient );
		update_option( 'gksef_email_notify_errors', $notify_errors );
		update_option( 'gksef_email_notify_circuit_breaker', $notify_cb );
		update_option( 'gksef_email_notify_confirmed', $notify_confirmed );
		update_option( 'gksef_email_rate_limit_minutes', $rate_limit_minutes );
		update_option( 'gksef_auto_email_enabled', $auto_email_enabled );
		update_option( 'gksef_auto_email_subject', $auto_email_subject );
		update_option( 'gksef_auto_email_body', $auto_email_body );

		// Redirect
		wp_safe_remote_post( admin_url( 'admin.php?page=ksef-email-settings' ), [ 'blocking' => false ] );
	}
}
