#!/usr/bin/env php
<?php
declare(strict_types = 1);

$paths = [
    __DIR__.'/vendor/autoload.php',
    __DIR__ . '/../../../vendor/autoload.php',
];

foreach ($paths as $file) {
    if (file_exists($file)) {
        require $file;
        break;
    }
}

use Halsey\Journal\{
    Command,
    Generate,
    Render,
    RewriteUrl,
    Templating,
    Load,
};
use Innmind\CLI\{
    Main,
    Environment,
    Commands,
};
use Innmind\OperatingSystem\OperatingSystem;
use Innmind\Templating\Factory;
use Innmind\Html\Reader\Reader;
use Innmind\Url\Path;
use Innmind\Immutable\Map;

new class extends Main {
    protected function main(Environment $env, OperatingSystem $os): Environment
    {
        $load = new Load($os->filesystem());
        $rewriteUrl = new RewriteUrl;
        $templating = Factory::build(
            Path::of(__DIR__.'/templates/'),
            null,
            Map::of(
                ['rewriteUrl', $rewriteUrl],
                ['helper', new Templating\Helper($rewriteUrl)],
            ),
        );
        $render = new Render\All(
            new Render\Markdown(
                $rewriteUrl,
                $templating,
            ),
            new Render\RewriteHtml(
                $rewriteUrl,
                Reader::default(),
            ),
            new Render\AddStaticFiles($os, Path::of(__DIR__.'/')),
        );
        $generateWebsite = new Generate($os, $render);

        $run = Commands::of(
            new Command\Preview($os, $generateWebsite, $load),
            new Command\Generate($generateWebsite, $load),
        );

        return $run($env);
    }
};
