<?php
if (defined('WFWAF_VERSION') && !defined('WFWAF_RUN_COMPLETE')) {

interface wfWAFStorageInterface {
	const IP_BLOCKS_ALL = PHP_INT_MAX;
	const IP_BLOCKS_SINGLE = 1; //1 << 0
	const IP_BLOCKS_BLACKLIST = 2; //1 << 1
	
	public function hasPreviousAttackData($olderThan);

	public function hasNewerAttackData($newerThan);

	public function getAttackData();

	public function getAttackDataArray();

	public function getNewestAttackDataArray($newerThan);

	public function truncateAttackData();

	/**
	 * @param array $failedRules
	 * @param string $failedParamKey
	 * @param string $failedParamValue
	 * @param wfWAFRequestInterface $request
	 * @param mixed $_
	 * @return mixed
	 */
	public function logAttack($failedRules, $failedParamKey, $failedParamValue, $request, $_ = null);

	/**
	 * @param int $timestamp
	 * @param string $ip
	 * @param bool $ssl
	 * @param array $failedRuleIDs
	 * @param wfWAFRequestInterface|string $request
	 * @param mixed $_
	 * @return mixed
	 */
//	public function logAttack($timestamp, $ip, $ssl, $failedRuleIDs, $request, $_ = null);

	/**
	 * @param float $timestamp
	 * @param string $ip
	 * @return mixed
	 */
	public function blockIP($timestamp, $ip);

	public function isIPBlocked($ip);
	
	public function purgeIPBlocks($types = wfWAFStorageInterface::IP_BLOCKS_ALL);

	public function getConfig($key, $default = null, $category = '');

	public function setConfig($key, $value, $category = '');

	public function unsetConfig($key, $category = '');

	public function uninstall();
	
	//optional public function fileList();

	public function isInLearningMode();

	public function isDisabled();

	public function getRulesDSLCacheFile();

	public function isAttackDataFull();

	public function vacuum();

	public function getRules();

	public function setRules($rules);

	public function needsInitialRules();
}
}
