<?php

namespace DgoraWcas\Analytics;

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class Maintenance {
	const HOOK                         = 'dgwt_wcas_analytics_maintenance';
	const ANALYTICS_EXPIRATION_IN_DAYS = 30;

	public function init() {
		$this->listenCron();
		add_action( 'init', [ $this, 'schedule' ] );
	}

	/**
	 * Listen to cron action
	 *
	 * @return void
	 */
	public function listenCron() {
		add_action( self::HOOK, [ $this, 'handleMaintenance' ] );
	}

	/**
	 * Schedule maintenance task
	 *
	 * @return void
	 */
	public function schedule() {
		if ( ! wp_next_scheduled( self::HOOK ) ) {
			wp_schedule_event( strtotime( 'tomorrow' ) + 2 * HOUR_IN_SECONDS, 'daily', self::HOOK );
		}
	}

	/**
	 * Unschedule maintenance task
	 *
	 * @return void
	 */
	public function unschedule() {
		$timestamp = wp_next_scheduled( self::HOOK );
		if ( $timestamp ) {
			wp_unschedule_event( $timestamp, self::HOOK );
		}
	}

	/**
	 * Handle maintenance task
	 *
	 * @return void
	 */
	public function handleMaintenance() {
		$expiration = self::ANALYTICS_EXPIRATION_IN_DAYS;

		if (
			defined( 'DGWT_WCAS_ANALYTICS_EXPIRATION_IN_DAYS' ) &&
			intval( DGWT_WCAS_ANALYTICS_EXPIRATION_IN_DAYS ) > 0
		) {
			$expiration = intval( DGWT_WCAS_ANALYTICS_EXPIRATION_IN_DAYS );
		}

		Database::wipeOldRecords( $expiration );
	}
}
