| 
<?php
 declare(strict_types=1);
 
 /**************************************************************************************
 *
 * Catalyst PHP Framework
 * PHP Version 8.3 (Required).
 *
 * @package   Catalyst
 * @subpackage Public
 * @see       https://github.com/arcanisgk/catalyst
 *
 * @author    Walter Nuñez (arcanisgk/original founder) <[email protected]>
 * @copyright 2023 - 2025
 * @license   http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 *
 * @note      This program is distributed in the hope that it will be useful
 *            WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 *            or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * @category  Framework
 * @filesource
 *
 * @link      https://catalyst.dock Local development URL
 *
 */
 
 /**
 * Check PHP version requirement
 */
 if (!version_compare(phpversion(), '8.3', '>=')) {
 die("This project requires PHP version 8.3 or higher");
 }
 
 /**
 * Set default timezone for the application
 */
 date_default_timezone_set('America/Panama');
 
 
 if (!defined('LOADED_SYS_CONSTANT')) {
 
 
 // Runtime start constants
 if (!defined('RUNTIME_START')) {
 /**
 * Defines a constant with runtime performance metrics
 */
 define('RUNTIME_START', [
 'TIME' => microtime(true),
 'MEMORY' => memory_get_usage(),
 'MEMORY_PEAK' => memory_get_peak_usage(),
 ]);
 }
 
 if (!defined('DS')) {
 define('DS', DIRECTORY_SEPARATOR);
 }
 
 
 // Path constants
 $path = implode(DS, array_slice(explode(DS, dirname(__DIR__)), 0, -1));
 if (!defined('PD')) {
 /**
 * Project Directory
 */
 define('PD', $path);
 }
 
 if (!defined('WD') && isset($_SERVER['DOCUMENT_ROOT'])) {
 /**
 * Web Directory
 */
 define('WD', trim($_SERVER['DOCUMENT_ROOT'], '/\\') . DS);
 }
 
 // Time constants
 if (!defined('CT')) {
 /**
 * Current time
 */
 define('CT', time());
 }
 
 // CLI detection
 if (!defined('IS_CLI')) {
 $isCLI = defined('STDIN')
 || php_sapi_name() === 'cli'
 || (stristr(PHP_SAPI, 'cgi') && getenv('TERM'))
 || (empty($_SERVER['REMOTE_ADDR']) && !isset($_SERVER['HTTP_USER_AGENT']) && count($_SERVER['argv']) > 0);
 
 /**
 * Determines if the current PHP script is running in CLI mode
 */
 define('IS_CLI', $isCLI);
 }
 
 // Terminal constants
 if (!defined('TW') && IS_CLI) {
 /**
 * Terminal Width
 */
 $termWidth = null;
 
 if (str_contains(PHP_OS, 'WIN')) {
 $termWidth = shell_exec('mode con');
 preg_match('/CON.*:(\n[^|]+?){3}(?<cols>\d+)/', $termWidth, $match);
 $termWidth = isset($match['cols']) ? (int)$match['cols'] : null;
 } elseif (function_exists('shell_exec')) {
 $termResponse = shell_exec('tput cols 2> /dev/tty');
 if ($termResponse !== null) {
 $termWidth = trim($termResponse) ?? null;
 if ($termWidth !== null) {
 $termWidth = (int)$termWidth;
 }
 }
 }
 
 if ($termWidth === null) {
 $termWidth = 80;
 }
 
 define('TW', $termWidth);
 }
 
 if (!defined('NL')) {
 $nl = defined('STDIN')
 || php_sapi_name() === "cli"
 || (stristr(PHP_SAPI, 'cgi') && getenv('TERM'))
 || (empty($_SERVER['REMOTE_ADDR']) && !isset($_SERVER['HTTP_USER_AGENT']) && count($_SERVER['argv']) > 0);
 
 /**
 * New Line
 */
 define('NL', $nl ? PHP_EOL : trim(nl2br(PHP_EOL)));
 }
 
 // Request constants
 if (!defined('RQ') && isset($_SERVER['REQUEST_METHOD'])) {
 /**
 * HTTP Request Method
 */
 define('RQ', $_SERVER['REQUEST_METHOD']);
 }
 
 if (!defined('UR') && isset($_SERVER['REQUEST_URI'])) {
 /**
 * HTTP Request URI
 */
 define('UR', $_SERVER['REQUEST_URI']);
 }
 
 // Theme/Application constants
 if (!defined('THEME_PATH')) {
 /**
 * Path to theme-specific views
 */
 define('THEME_PATH', implode(DS, [PD, 'bootstrap', 'template']));
 }
 
 if (!defined('DEFAULT_LAYOUT')) {
 /**
 * Default layout template name
 */
 define('DEFAULT_LAYOUT', 'default');
 }
 
 // Log constants
 if (!defined('LOG_DIR')) {
 /**
 * Log Directory
 */
 define('LOG_DIR', implode(DS, [PD, 'logs']));
 }
 
 if (!defined('DISPLAY_LOGS')) {
 /**
 * Display Logs setting
 */
 define('DISPLAY_LOGS', false);
 }
 
 define('LOADED_SYS_CONSTANT', true);
 }
 |