<?php

if (!defined('ABSPATH')) {
    exit;
}
class WC_Action_Queue implements WC_Queue_Interface
{
    public function add($hook, $args = array(), $group = '')
    {
        return $this->schedule_single(time(), $hook, $args, $group);
    }
    public function schedule_single($timestamp, $hook, $args = array(), $group = '')
    {
        return as_schedule_single_action($timestamp, $hook, $args, $group);
    }
    public function schedule_recurring($timestamp, $interval_in_seconds, $hook, $args = array(), $group = '')
    {
        return as_schedule_recurring_action($timestamp, $interval_in_seconds, $hook, $args, $group);
    }
    public function schedule_cron($timestamp, $cron_schedule, $hook, $args = array(), $group = '')
    {
        return as_schedule_cron_action($timestamp, $cron_schedule, $hook, $args, $group);
    }
    public function cancel($hook, $args = array(), $group = '')
    {
        as_unschedule_action($hook, $args, $group);
    }
    public function cancel_all($hook, $args = array(), $group = '')
    {
        as_unschedule_all_actions($hook, $args, $group);
    }
    public function get_next($hook, $args = null, $group = '')
    {
        $next_timestamp = as_next_scheduled_action($hook, $args, $group);
        if (is_numeric($next_timestamp)) {
            return new WC_DateTime("@{$next_timestamp}", new DateTimeZone('UTC'));
        }
        return null;
    }
    public function search($args = array(), $return_format = OBJECT)
    {
        return as_get_scheduled_actions($args, $return_format);
    }
}