<?php
/*
 * Copyright © 2024 ExacTI Technology Solutions. All rights reserved.
 * GPLv3 General License.
 * https://exacti.com.br
 */


namespace Phacil\Framework\Session\Redis;

use Phacil\Framework\Exception;

class Logger implements \Cm\RedisSession\Handler\LoggerInterface
{
	/**
	 * @var int
	 */
	private $logLevel;

	/**
	 * Logger constructor
	 *
	 * @param \Cm\RedisSession\Handler\ConfigInterface $config
	 */
	public function __construct(\Cm\RedisSession\Handler\ConfigInterface $config)
	{
		$this->logLevel = $config->getLogLevel() ?: self::ALERT;
	}

	/**
	 * {@inheritdoc}
	 */
	public function setLogLevel($level)
	{
		$this->logLevel = $level;
	}

	/**
	 * {@inheritdoc}
	 */
	public function log($message, $level)
	{
		$engine = \Phacil\Framework\Registry::getInstance();
		if ($this->logLevel >= $level) {
			switch ($level) {
				case self::EMERGENCY:
				case self::CRITICAL:
				case self::ERROR:
					trigger_error($message, E_ERROR);
					break;
				case self::ALERT:
				case self::WARNING:
					//$this->logger->alert($message);
					$engine->log->write($message,E_WARNING);
					break;
				case self::NOTICE:
				case self::INFO:
					$engine->log->write($message);
					break;
				default:
					$engine->log->write($message);
			}
		}
	}

	/**
	 * {@inheritdoc}
	 */
	public function logException(\Exception $e)
	{
		throw new Exception($e->getMessage());
	}
}