<?php
if (!defined('ABSPATH')) die('No direct access allowed');

if (!class_exists('WP_Optimize_Server_Compatibility')) :
/**
 * Adds compatibility for Servers.
 */
class WP_Optimize_Server_Compatibility {

	/**
	 * Returns singleton instance
	 *
	 * @return WP_Optimize_Server_Compatibility
	 */
	public static function get_instance() {
		static $instance = null;
		if (null === $instance) {
			$instance = new WP_Optimize_Server_Compatibility();
		}
		return $instance;
	}

	/**
	 * Detects whether the server handles cache. e.g. Nginx cache
	 *
	 * @return bool
	 */
	public function does_server_handle_cache(): bool {
		return $this->is_kinsta();
	}

	/**
	 * Detects whether the server supports table optimization.
	 *
	 * Some servers prevent table optimization
	 * because InnoDB engine does not optimize table
	 * instead it drops tables and recreates them,
	 * which results in elevated disk write operations
	 *
	 * @return bool
	 */
	public function does_server_allow_table_optimization(): bool {
		return !$this->is_kinsta();
	}

	/**
	 * Detects whether the server supports local webp conversion tools
	 *
	 * @return bool
	 */
	public function does_server_allow_local_webp_conversion(): bool {
		return !$this->is_kinsta();
	}

	/**
	 * Detects if the platform is Kinsta or not
	 *
	 * @return bool Returns true if it is a Kinsta platform, otherwise returns false
	 */
	private function is_kinsta(): bool {
		$is_kinsta = isset($_SERVER['KINSTA_CACHE_ZONE']);

		/**
		 * Filter whether the server is detected as Kinsta.
		 *
		 * Allows overriding the default detection logic in case
		 * Kinsta changes environment variables or for edge cases.
		 *
		 * @param bool $is_kinsta Detected Kinsta status.
		 */
		return (bool) apply_filters('wpo_is_kinsta_server', $is_kinsta);
	}
}
endif;
