<?php

namespace App\Controllers;

use CodeIgniter\Controller;
use CodeIgniter\HTTP\CLIRequest;
use CodeIgniter\HTTP\IncomingRequest;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
use CodeIgniter\Cache\CacheInterface;


/**
 * Class BaseController
 *
 * BaseController provides a convenient place for loading components
 * and performing functions that are needed by all your controllers.
 * Extend this class in any new controllers:
 *     class Home extends BaseController
 *
 * For security be sure to declare any new methods as protected or private.
 */
class BaseController extends Controller
{
    /**
     * Instance of the main Request object.
     *
     * @var CLIRequest|IncomingRequest
     */
    protected $request;

    /**
     * An array of helpers to be loaded automatically upon
     * class instantiation. These helpers will be available
     * to all other controllers that extend BaseController.
     *
     * @var array
     */
    protected $helpers = [];

    /**
     * Constructor.
     */
    public function initController(RequestInterface $request, ResponseInterface $response, LoggerInterface $logger)
    {
        // Do Not Edit This Line
        parent::initController($request, $response, $logger);

        // Preload any models, libraries, etc, here.

        // E.g.: $this->session = \Config\Services::session();
    }


    public function saveCache($cacheKey,$data){
        $cacheKey = CACHE_DOMAIN."-".$cacheKey;
       // $cache = \Config\Services::cache();
        if (! $foo = cache($cacheKey)) {
          //  echo 'Saving to the cache!<br>';
           // cache()->save($cacheKey, $this->data_stringify($data), 3000);
            cache()->save($cacheKey, serialize($data), 3000);

            //serialize
        }
        $foo = cache()->get($cacheKey);
        log_message('critical', "FROM Cache -> ".$foo );

    }

    public function getCache($cacheKey){
        $data = [];
        $cacheKey = CACHE_DOMAIN."-".$cacheKey;
        if (cache($cacheKey)) {
        //   echo 'Getting Data From Cache!<br>';
            $data  = unserialize(cache()->get($cacheKey));
        }
       return $data;
    }
    private function data_stringify($data) {
        switch (gettype($data)) {
            case 'string' : return '\''.addcslashes($data, "'\\").'\'';
            case 'boolean': return $data ? 'true' : 'false';
            case 'NULL'   : return 'null';
            case 'object' :
            case 'array'  :
                $expressions = [];
                foreach ($data as $c_key => $c_value) {
                    $expressions[] = $this->data_stringify($c_key).' => '.
                        $this->data_stringify($c_value);
                }
                return gettype($data) === 'object' ?
                    '(object)['.implode(', ', $expressions).']' :
                    '['.implode(', ', $expressions).']';
            default: return (string)$data;
        }
    }
}
