<?php

namespace DgoraWcas\Analytics;

use DgoraWcas\Helpers;

// Exit if accessed directly
if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

class Analytics {
	public function init() {

		$allowByConstant = defined( 'DGWT_WCAS_ANALYTICS_ENABLE' ) && DGWT_WCAS_ANALYTICS_ENABLE;

		// Publish this module conditionally in v1.18.0 and for everyone in v1.19.0
		if (
			! $this->isModuleEnabled()
			&& version_compare( DGWT_WCAS_VERSION, '1.18.99' ) < 0
			&& ! $allowByConstant
		) {
			return;
		}

		if ( is_admin() ) {
			// Load user interface
			$ui = new UserInterface( $this );
			$ui->init();

			$widget = new Widget( $this, $ui );
			$widget->init();
		}

		// Database
		Database::registerTables();
		$this->maybeInstallDatabase();

		// Maintenance.
		$maintenance = new Maintenance();
		if ( $this->isModuleEnabled() ) {
			$maintenance->init();
		} else {
			$maintenance->unschedule();
		}
	}

	/**
	 * Check if the Analytics module is enabled
	 *
	 * @return bool
	 */
	public function isModuleEnabled() {
		return DGWT_WCAS()->settings->getOption( 'analytics_enabled', 'off' ) === 'on';
	}

	/**
	 * Create the database table if necessary
	 *
	 * @return void
	 */
	public function maybeInstallDatabase() {
		// Try to create tables after enabling Search Analytics module
		add_action(
			'update_option_' . DGWT_WCAS_SETTINGS_KEY,
			function ( $oldValue, $newValue ) {

				$key = 'analytics_enabled';

				$nowEnabled  = isset( $newValue[ $key ] ) && $newValue[ $key ] === 'on';
				$wasDisabled = ! isset( $oldValue[ $key ] ) || ( isset( $oldValue[ $key ] ) && $oldValue[ $key ] !== 'on' );

				if ( $nowEnabled && $wasDisabled ) {
					Database::maybeInstall();
				}

			},
			10,
			2
		);

		// Try to create tables when Search Analytics module is created, but from some reasons the table wasn't created
		if (
			Helpers::isSettingsPage()
			&& $this->isModuleEnabled()
			&& ! Database::exist()
		) {
			Database::maybeInstall();
		}
	}
}
