<?php

defined('ABSPATH') || exit;
class WC_Orders_Tracking
{
    public function init()
    {
        add_action('woocommerce_order_status_changed', array($this, 'track_order_status_change'), 10, 3);
        add_action('load-edit.php', array($this, 'track_orders_view'), 10);
        add_action('pre_post_update', array($this, 'track_created_date_change'), 10);
        add_action('woocommerce_process_shop_order_meta', array($this, 'track_order_action'), 51);
        add_action('load-post-new.php', array($this, 'track_add_order_from_edit'), 10);
        add_filter('woocommerce_shop_order_search_results', array($this, 'track_order_search'), 10, 3);
    }
    public function track_order_search($order_ids, $term, $search_fields)
    {
        if (!function_exists('get_current_screen')) {
            return $order_ids;
        }
        $screen = get_current_screen();
        if ('edit-shop_order' === $screen->id) {
            WC_Tracks::record_event('orders_view_search');
        }
        return $order_ids;
    }
    public function track_orders_view()
    {
        if (isset($_GET['post_type']) && 'shop_order' === wp_unslash($_GET['post_type'])) {
            $properties = array('status' => isset($_GET['post_status']) ? sanitize_text_field($_GET['post_status']) : 'all');
            WC_Tracks::record_event('orders_view', $properties);
        }
    }
    public function track_order_status_change($id, $previous_status, $next_status)
    {
        $order = wc_get_order($id);
        $properties = array('order_id' => $id, 'next_status' => $next_status, 'previous_status' => $previous_status, 'date_created' => $order->get_date_created() ? $order->get_date_created()->date('Y-m-d') : '', 'payment_method' => $order->get_payment_method(), 'order_total' => $order->get_total());
        WC_Tracks::record_event('orders_edit_status_change', $properties);
    }
    public function track_created_date_change($id)
    {
        $post_type = get_post_type($id);
        if ('shop_order' !== $post_type) {
            return;
        }
        if ('auto-draft' === get_post_status($id)) {
            return;
        }
        $order = wc_get_order($id);
        $date_created = $order->get_date_created() ? $order->get_date_created()->date('Y-m-d H:i:s') : '';
        $new_date = sprintf('%s %2d:%2d:%2d', isset($_POST['order_date']) ? wc_clean(wp_unslash($_POST['order_date'])) : '', isset($_POST['order_date_hour']) ? wc_clean(wp_unslash($_POST['order_date_hour'])) : '', isset($_POST['order_date_minute']) ? wc_clean(wp_unslash($_POST['order_date_minute'])) : '', isset($_POST['order_date_second']) ? wc_clean(wp_unslash($_POST['order_date_second'])) : '');
        if ($new_date !== $date_created) {
            $properties = array('order_id' => $id, 'status' => $order->get_status());
            WC_Tracks::record_event('order_edit_date_created', $properties);
        }
    }
    public function track_order_action($order_id)
    {
        if (!empty($_POST['wc_order_action'])) {
            $order = wc_get_order($order_id);
            $action = wc_clean(wp_unslash($_POST['wc_order_action']));
            $properties = array('order_id' => $order_id, 'status' => $order->get_status(), 'action' => $action);
            WC_Tracks::record_event('order_edit_order_action', $properties);
        }
    }
    public function track_add_order_from_edit()
    {
        if (isset($_GET['post_type']) && 'shop_order' === wp_unslash($_GET['post_type'])) {
            $referer = wp_get_referer();
            if ($referer) {
                $referring_page = wp_parse_url($referer);
                $referring_args = array();
                $post_edit_page = wp_parse_url(admin_url('post.php'));
                if (!empty($referring_page['query'])) {
                    parse_str($referring_page['query'], $referring_args);
                }
                if ($post_edit_page['path'] === $referring_page['path'] && isset($referring_args['action']) && 'edit' === $referring_args['action'] && isset($referring_args['post']) && 'shop_order' === get_post_type($referring_args['post'])) {
                    WC_Tracks::record_event('order_edit_add_order');
                }
            }
        }
    }
}