<?php
/**
 * Email Collection Helper class.
 *
 * @package Formidable
 */

if ( ! defined( 'ABSPATH' ) ) {
	die( 'You are not allowed to call this page directly.' );
}

/**
 * Provides helper functions for email collection and subscription.
 *
 * @since 6.25
 */
class FrmEmailCollectionHelper {

	/**
	 * When the user consents to receiving news of updates, subscribe their email to ActiveCampaign.
	 *
	 * @since 6.25
	 *
	 * @param string $email The email address to subscribe to ActiveCampaign.
	 *
	 * @return void
	 */
	public static function subscribe_to_active_campaign( $email = '' ) {
		$user = wp_get_current_user();

		if ( ! $email ) {
			$email = $user->user_email;
		}

		if ( self::is_fake_email( $email ) ) {
			return;
		}

		$user_id    = $user->ID;
		$first_name = get_user_meta( $user_id, 'first_name', true );
		$last_name  = get_user_meta( $user_id, 'last_name', true );

		wp_remote_post(
			'https://sandbox.formidableforms.com/api/wp-admin/admin-ajax.php?action=frm_forms_preview&form=subscribe-onboarding',
			array(
				'body' => http_build_query(
					array(
						'form_key'      => 'subscribe-onboarding',
						'frm_action'    => 'create',
						'form_id'       => 5,
						'item_key'      => '',
						'item_meta[0]'  => '',
						'item_meta[15]' => $email,
						'item_meta[17]' => 'Source - FF Lite Plugin Onboarding',
						'item_meta[18]' => is_string( $first_name ) ? $first_name : '',
						'item_meta[19]' => is_string( $last_name ) ? $last_name : '',
					)
				),
			)
		);
	}

	/**
	 * Check if an email is fake, test, or local development email.
	 *
	 * @since 6.25
	 *
	 * @param string $email The email address to check.
	 *
	 * @return bool True if the email is fake/test, false if valid.
	 */
	public static function is_fake_email( $email ) {
		if ( ! is_email( $email ) ) {
			return true;
		}

		$substrings = array(
			'@wpengine.local',
			'@example.com',
			'@localhost',
			'@local.dev',
			'@local.test',
			'test@gmail.com',
			'admin@gmail.com',
		);

		foreach ( $substrings as $substring ) {
			if ( str_contains( $email, $substring ) ) {
				return true;
			}
		}

		return false;
	}
}
