<?php

use Automattic\Jetpack\Constants;
use Automattic\WooCommerce\Utilities\NumberUtil;
defined('ABSPATH') || exit;
class WC_Tracks_Client
{
    const PIXEL = 'https://pixel.wp.com/t.gif';
    const BROWSER_TYPE = 'php-agent';
    const USER_AGENT_SLUG = 'tracks-client';
    public static function init()
    {
        add_action('admin_init', array(__CLASS__, 'maybe_set_identity_cookie'));
    }
    public static function maybe_set_identity_cookie()
    {
        if (Constants::is_true('DOING_AJAX')) {
            return;
        }
        if (isset($_COOKIE['tk_ai'])) {
            return;
        }
        $user = wp_get_current_user();
        if ($user instanceof WP_User && 'wptests_capabilities' === $user->cap_key) {
            return false;
        }
        $user_id = $user->ID;
        $anon_id = get_user_meta($user_id, '_woocommerce_tracks_anon_id', true);
        if (!$anon_id) {
            $anon_id = self::get_anon_id();
            update_user_meta($user_id, '_woocommerce_tracks_anon_id', $anon_id);
        }
        if (!Constants::is_true('REST_REQUEST') && !Constants::is_true('XMLRPC_REQUEST')) {
            wc_setcookie('tk_ai', $anon_id);
        }
    }
    public static function record_event($event)
    {
        if (!$event instanceof WC_Tracks_Event) {
            $event = new WC_Tracks_Event($event);
        }
        if (is_wp_error($event)) {
            return $event;
        }
        $pixel = $event->build_pixel_url($event);
        if (!$pixel) {
            return new WP_Error('invalid_pixel', 'cannot generate tracks pixel for given input', 400);
        }
        return self::record_pixel($pixel);
    }
    public static function record_pixel($pixel)
    {
        $pixel .= '&_rt=' . self::build_timestamp() . '&_=_';
        wp_safe_remote_get($pixel, array('blocking' => false, 'redirection' => 2, 'httpversion' => '1.1', 'timeout' => 1));
        return true;
    }
    public static function build_timestamp()
    {
        $ts = NumberUtil::round(microtime(true) * 1000);
        return number_format($ts, 0, '', '');
    }
    public static function get_identity($user_id)
    {
        $jetpack_lib = '/tracks/client.php';
        if (class_exists('Jetpack') && Constants::is_defined('JETPACK__VERSION')) {
            if (version_compare(Constants::get_constant('JETPACK__VERSION'), '7.5', '<')) {
                if (file_exists(jetpack_require_lib_dir() . $jetpack_lib)) {
                    include_once jetpack_require_lib_dir() . $jetpack_lib;
                    if (function_exists('jetpack_tracks_get_identity')) {
                        return jetpack_tracks_get_identity($user_id);
                    }
                }
            } else {
                $tracking = new Automattic\Jetpack\Tracking();
                return $tracking->tracks_get_identity($user_id);
            }
        }
        $anon_id = isset($_COOKIE['tk_ai']) ? sanitize_text_field(wp_unslash($_COOKIE['tk_ai'])) : false;
        if (!$anon_id) {
            $anon_id = get_user_meta($user_id, '_woocommerce_tracks_anon_id', true);
        }
        if (!$anon_id) {
            $anon_id = self::get_anon_id();
            update_user_meta($user_id, '_woocommerce_tracks_anon_id', $anon_id);
        }
        return array('_ut' => 'anon', '_ui' => $anon_id);
    }
    public static function get_anon_id()
    {
        static $anon_id = null;
        if (!isset($anon_id)) {
            if (isset($_COOKIE['tk_ai'])) {
                $anon_id = sanitize_text_field(wp_unslash($_COOKIE['tk_ai']));
            } else {
                $binary = '';
                for ($i = 0; $i < 18; ++$i) {
                    $binary .= chr(wp_rand(0, 255));
                }
                $anon_id = 'woo:' . base64_encode($binary);
            }
        }
        return $anon_id;
    }
}
WC_Tracks_Client::init();