<?php

abstract class ActionScheduler_Abstract_Schedule extends ActionScheduler_Schedule_Deprecated
{
    private $scheduled_date = NULL;
    protected $scheduled_timestamp = NULL;
    public function __construct(DateTime $date)
    {
        $this->scheduled_date = $date;
    }
    public abstract function is_recurring();
    protected abstract function calculate_next(DateTime $after);
    public function get_next(DateTime $after)
    {
        $after = clone $after;
        if ($after > $this->scheduled_date) {
            $after = $this->calculate_next($after);
            return $after;
        }
        return clone $this->scheduled_date;
    }
    public function get_date()
    {
        return $this->scheduled_date;
    }
    public function __sleep()
    {
        $this->scheduled_timestamp = $this->scheduled_date->getTimestamp();
        return array('scheduled_timestamp');
    }
    public function __wakeup()
    {
        $this->scheduled_date = as_get_datetime_object($this->scheduled_timestamp);
        unset($this->scheduled_timestamp);
    }
}