<?php
namespace Misuzu;

define('MSZ_STARTUP', hrtime(true));
define('MSZ_ROOT', __DIR__);

require_once __DIR__ . '/vendor/autoload.php';

$msz = (function() {
    $timings = new \Index\Performance\Timings(
        new \Index\Performance\Stopwatch(MSZ_STARTUP),
    );

    try {
        \Dotenv\Dotenv::createImmutable(Misuzu::PATH_ROOT)->load();

        $sentry = Misuzu::env('SENTRY_DSN');
        if(!empty($sentry))
            \Sentry\init(['dsn' => $sentry]);

        $whoops = new \Whoops\Run;
        if(Misuzu::cli())
            $whoops->pushHandler(new Whoops\SentryPlainTextHandler);
        elseif(Misuzu::debug())
            $whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
        else
            $whoops->pushHandler(new Whoops\SentryPageHandler);

        $whoops->register();

        return new MisuzuContext(
            $timings,
            Misuzu::env('DATABASE_DSN', 'null:'),
            Misuzu::env('DOMAIN_ROLES', 'localhost=main,redirect,storage'),
            Misuzu::env('STORAGE_PATH_LOCAL', Misuzu::PATH_STORAGE),
            Misuzu::env('STORAGE_PATH_REMOTE', '/_storage'),
            Misuzu::env('TEMPLATE_CACHE', ''),
        );
    } finally {
        $timings->lap('startup');
    }
})();