<?php

/**
 * The Front Controller for handling every request
 *
 * CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
 * Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @copyright     Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
 * @link          https://cakephp.org CakePHP(tm) Project
 * @since         0.2.9
 * @license       MIT License (https://opensource.org/licenses/mit-license.php)
 */

// Serve static webroot files even when the hosting rewrite rules send them here.
// This protects assets like /frontend/style.css and /favicon-32x32.png.
if (PHP_SAPI !== 'cli-server') {
    $url = parse_url(urldecode($_SERVER['REQUEST_URI'] ?? ''));
    $path = $url['path'] ?? '';
    $file = realpath(__DIR__ . $path);
    $webroot = realpath(__DIR__);

    if (
        $file !== false
        && $webroot !== false
        && str_starts_with($file, $webroot . DIRECTORY_SEPARATOR)
        && is_file($file)
    ) {
        $type = function_exists('mime_content_type') ? mime_content_type($file) : false;
        $types = [
            'css' => 'text/css',
            'js' => 'application/javascript',
            'png' => 'image/png',
            'jpg' => 'image/jpeg',
            'jpeg' => 'image/jpeg',
            'gif' => 'image/gif',
            'webp' => 'image/webp',
            'svg' => 'image/svg+xml',
            'ico' => 'image/x-icon',
            'woff' => 'font/woff',
            'woff2' => 'font/woff2',
            'ttf' => 'font/ttf',
            'eot' => 'application/vnd.ms-fontobject',
            'xml' => 'application/xml',
            'webmanifest' => 'application/manifest+json',
        ];
        $extension = strtolower(pathinfo($file, PATHINFO_EXTENSION));

        header('Content-Type: ' . ($types[$extension] ?? $type ?: 'application/octet-stream'));
        header('Content-Length: ' . filesize($file));
        readfile($file);
        exit;
    }
}

// Check platform requirements
require dirname(__DIR__) . '/config/requirements.php';

// For built-in server
if (PHP_SAPI === 'cli-server') {
    $_SERVER['PHP_SELF'] = '/' . basename(__FILE__);

    $url = parse_url(urldecode($_SERVER['REQUEST_URI']));
    $file = __DIR__ . $url['path'];
    if (strpos($url['path'], '..') === false && strpos($url['path'], '.') !== false && is_file($file)) {
        return false;
    }
}
require dirname(__DIR__) . '/vendor/autoload.php';

use App\Application;
use Cake\Http\Server;

// Bind your application to the server.
$server = new Server(new Application(dirname(__DIR__) . '/config'));

// Run the request/response through the application and emit the response.
$server->emit($server->run());
