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

namespace Aviat\Kilo;

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

// Log notices/errors/warnings to file
set_exception_handler(static function (\Throwable $e) {
	$msg = print_r([
		'code' => $e->getCode(),
		'message' => $e->getMessage(),
		'file' => $e->getFile(),
		'line' => $e->getLine(),
		'trace' => $e->getTraceAsString(),
	], TRUE);
	file_put_contents('kilo.log', $msg, FILE_APPEND);
});

// ! Init with an IIFE
return (static function (int $argc, array $argv): int {
	Termios::enableRawMode();
	register_shutdown_function([Termios::class, 'disableRawMode']);

	$editor = Editor::new();
	$editor->setStatusMessage('HELP: Ctrl-S = save | Ctrl-Q = quit | Ctrl-F = find');

	if ($argc >= 2)
	{
		$editor->open($argv[1]);
	}

	// Input Loop
	do { $editor->refreshScreen();} while ($editor->processKeypress() !== NULL);

	return 0;
})($argc, $argv);