<?php

class OsParamsHelper {

	private static $params = [];
	private static $files  = [];

	public static function load_params() {
		$params      = array();
		$post_params = array();
		$get_params  = array();
		if ( ! empty( $_POST['params'] ) ) {
			if ( is_string( $_POST['params'] ) ) {
				parse_str( $_POST['params'], $post_params );
			}
			if ( is_array( $_POST['params'] ) ) {
				$post_params = array_merge( $_POST['params'], $post_params );
			}
		}
		$get_params   = $_GET;
		$params       = array_merge( $post_params, $get_params );
		$params       = stripslashes_deep( $params );
		self::$params = $params;
	}

	public static function load_files() {
		if ( ! empty( $_FILES ) ) {
			self::$files = $_FILES;
		} else {
			self::$files = [];
		}
	}


	public static function get_params() {
		self::ensure_params_loaded();
		OsDebugHelper::log_params( self::$params );

		return self::$params;
	}

	public static function get_param( $param_name ) {
		self::ensure_params_loaded();
		return self::$params[ $param_name ] ?? null;
	}

	public static function ensure_params_loaded() {
		if ( empty( self::$params ) ) {
			self::load_params();
		}
	}

	public static function get_files() {
		self::ensure_files_loaded();
		OsDebugHelper::log_files( self::$files );

		return self::$files;
	}

	public static function get_file( $file_name ) {
		self::ensure_files_loaded();

		return self::$files[ $file_name ] ?? null;
	}

	public static function ensure_files_loaded() {
		if ( empty( self::$files ) ) {
			self::load_files();
		}
	}

	public static function sanitize_param( $value, $rule ) {
		switch ( $rule ) {
			case 'money':
				$value = OsMoneyHelper::convert_amount_from_money_input_to_db_format( $value );
				break;
			case 'percent':
				$value = OsMoneyHelper::convert_value_from_percent_input_to_db_format( $value );
				break;
			case 'date':
				break;
		}

		return $value;
	}

	public static function permit_params( array $params, array $allowed_keys ): array {
		$allowed_keys_arr = array_flip( $allowed_keys );

		return array_intersect_key( $params, $allowed_keys_arr );
	}
}
