<?php

namespace Macymed\MacymedLinkTracker\Utils;

if (! defined('ABSPATH')) {
    exit; // Sécurité
}
class TrackerHelper
{
    public static function get_user_agent()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['HTTP_USER_AGENT'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_USER_AGENT']));
            return esc_html($data);
        }

        return '';
    }
    
    public static function get_request_method()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['REQUEST_METHOD'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['REQUEST_METHOD']));
            return esc_html($data);
        }

        return '';
    }
    public static function get_ip_address()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['REMOTE_ADDR'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['REMOTE_ADDR']));
            return esc_html($data);
        }

        return '';
    }
    public static function get_http_host()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['HTTP_HOST'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_HOST']));
            return esc_html($data);
        }

        return '';
    }

    public static function get_referrer()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['HTTP_REFERER'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_REFERER']));
            return esc_html($data);
        }

        return '';
    }

    public static function get_current_url()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['REQUEST_URI'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI']));
            return esc_html($data);
        }

        return '';
    }

    public static function get_current_uri()
    {

        // Vérifie si l'agent utilisateur est défini et non vide
        if (!empty($_SERVER['REQUEST_URI'])) {
            // Supprime les barres d'échappement, valide et échappe la sortie
            $data = sanitize_text_field(wp_unslash($_SERVER['REQUEST_URI']));
            return esc_html($data);
        }

        return '';
    }

    public static function getTypeUrl($url)
    {
        $currentDomain = Utils::get_current_domain();
        $referer = self::get_referrer();

        if (!empty($referer)) {
            if (strpos($referer, '/') === 0) {
                return 'direct_access';
            }
            if (strpos($referer, $currentDomain) === false) {
                return 'inbound';
            }
        }
        if (strpos($url, '/') === 0) {
            return 'internal';
        }
        $domainUrl = wp_parse_url($url, PHP_URL_HOST);
        if ($domainUrl === $currentDomain) {
            return 'internal';
        }
        if ($domainUrl !== $currentDomain) {
            return 'external';
        }
        if (is_404($url)) {
            return '404';
        }
    }

    public static function getRedirectType($url)
    {
        $getParameters = wp_parse_url($url, PHP_URL_QUERY);
        if (isset($getParameters['redirect_type'])) {
            return esc_html(wp_unslash($getParameters['redirect_type']));
        }
        return 'php';
    }

    public static function get_accept()
    {
        if (!empty($_SERVER['HTTP_ACCEPT'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_ACCEPT']));
            return esc_html($data);
        }
        return '';
    }

    public static function get_accept_language()
    {
        if (!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_ACCEPT_LANGUAGE']));
            return esc_html($data);
        }
        return '';
    }

    public static function get_x_platform()
    {
        if (!empty($_SERVER['HTTP_X_PLATFORM'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_X_PLATFORM']));
            return esc_html($data);
        }
        return '';
    }

    public static function get_x_operating_system()
    {
        if (!empty($_SERVER['HTTP_X_OPERATING_SYSTEM'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_X_OPERATING_SYSTEM']));
            return esc_html($data);
        }
        return '';
    }

    public static function get_via()
    {
        if (!empty($_SERVER['HTTP_VIA'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_VIA']));
            return esc_html($data);
        }
        return '';
    }

    public static function get_forwarded_for()
    {
        if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
            $data = sanitize_text_field(wp_unslash($_SERVER['HTTP_X_FORWARDED_FOR']));
            return esc_html($data);
        }
        return '';
    }
    public static function extractPersonalData()
    {
        $personalDataToExtract  = [];
        $personalDataToExtractList = get_option('macymed_tracker_tracking_list_personal_data_to_track', []);
        // $personalDataToExtract['HTTP_REFERER'] = self::get_referrer();
        $personalDataToExtract = [
            'HTTP_REFERER'          => self::get_referrer(),
            'HTTP_ACCEPT'           => self::get_accept(),
            'HTTP_ACCEPT_LANGUAGE'  => self::get_accept_language(),
            'HTTP_X_PLATFORM'       => self::get_x_platform(),
            'HTTP_X_OPERATING_SYSTEM' => self::get_x_operating_system(),
            'HTTP_VIA'              => self::get_via(),
            'HTTP_X_FORWARDED_FOR'  => self::get_forwarded_for(),
        ];
        foreach ($personalDataToExtractList as $keyData1 => $keyData) {
            if ($keyData === 'SESSION') {
                $personalDataToExtract[$keyData] = ($_SESSION);
            } elseif ($keyData === 'COOKIE') {
                $personalDataToExtract[$keyData] = ($_COOKIE);
            } elseif (isset($_SERVER[$keyData])) {
                if (!empty($_SERVER[$keyData])) {
                    // Supprime les barres d'échappement, valide et échappe la sortie
                    $data = sanitize_text_field(wp_unslash($_SERVER[$keyData]));
                    $personalDataToExtract[$keyData] = $data;
                }
            }
        }

        return $personalDataToExtract;
    }

    public static function isExcludedFromRedirection($url) {}
    public static function isExcludedFromTracking($url)
    {
        // Comportement par défaut du plugin gratuit
        $isExcluded = false;

        $typeToTrack = get_option('macymed_tracker_tracking_list_to_track', []);
        if (in_array(self::getTypeUrl($url), $typeToTrack)) {
            $isExcluded = false;
        }



        // // Exemple : exclure certains éléments spécifiques
        // if (in_array($item, ['admin', 'debug'], true)) {
        //     $isExcluded = true;
        // }

        // Permet au plugin Pro d’ajouter ou modifier le comportement
        return apply_filters('macymed_link_tracker_is_excluded_from_tracking', $isExcluded, $url);
    }
}
