<?php
namespace ShortPixel\Controller;

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

use ShortPixel\ShortPixelLogger\ShortPixelLogger as Log;
use ShortPixel\Model\CacheModel as CacheModel;
// Future replacement for everything that needs temporary storage
// Storage agnostic -> called function should not need to know what is stored where, this is job of controller.
// Works with cache-model, which handles the data representation and storage.
//

class CacheController extends \ShortPixel\Controller
{
  protected static $cached_items = array();

  public function __construct()
  {
  }

  public function storeItem($name, $value, $expires = HOUR_IN_SECONDS)
  {
     $cache = $this->getItem($name);
     $cache->setValue($value);
     $cache->setExpires($expires);

     $cache->save();
     $cache = apply_filters('shortpixel/cache/save', $cache, $name);
     self::$cached_items[$name] = $cache;

     return $cache;
  }

  /** Store a cacheModel Object.
  * This can be used after requesting a cache item for instance.
  *  @param CacheModel $cache The Cache Model Item.
  */
  public function storeItemObject(CacheModel $cache)
  {
       self::$cached_items[$cache->getName()] = $cache;
       $cache->save();
  }

  public function getItem($name)
  {
     if (isset(self::$cached_items[$name]))
      return self::$cached_items[$name];

     $cache = new CacheModel($name);
     $cache = apply_filters('shortpixel/cache/get', $cache, $name);
     self::$cached_items[$name] = $cache;

     return $cache;
  }

  public function deleteItem($name)
  {
    $cache = $this->getItem($name);

    if ($cache->exists())
    {
      $cache->delete();
    }

  }

  public function deleteItemObject(CacheModel $cache)
  {
    $cache->delete();
  }

}
