<?php
/**
 * Stores the info about webhook events.
 *
 * @package WooCommerce\PayPalCommerce\Webhooks
 */

declare(strict_types=1);

namespace WooCommerce\PayPalCommerce\Webhooks;

use WooCommerce\PayPalCommerce\ApiClient\Entity\WebhookEvent;

/**
 * Class WebhookInfoStorage
 */
class WebhookInfoStorage {

	/**
	 * The WP option key.
	 *
	 * @var string
	 */
	private $key;

	/**
	 * WebhookInfoStorage constructor.
	 *
	 * @param string $key The WP option key.
	 */
	public function __construct(
		string $key
	) {
		$this->key = $key;
	}

	/**
	 * Saves the info about webhook event.
	 *
	 * @param WebhookEvent $webhook_event The webhook event to save.
	 */
	public function save( WebhookEvent $webhook_event ): void {
		$data = array(
			'id'            => $webhook_event->id(),
			'received_time' => time(),
		);

		update_option( $this->key, $data );
	}

	/**
	 * Returns the stored data or null.
	 */
	public function get_data(): ?array {
		$data = get_option( $this->key );
		if ( ! $data || ! is_array( $data ) ) {
			return null;
		}
		return $data;
	}

	/**
	 * Checks if there is any stored data.
	 */
	public function is_empty(): bool {
		$data = get_option( $this->key );
		return ! $data || ! is_array( $data );
	}

	/**
	 * Removes the stored data.
	 */
	public function clear(): void {
		delete_option( $this->key );
	}
}
