#!/usr/bin/env php

<?php
// Register the Composer autoloader...
require __DIR__ . "/vendor/autoload.php";
require __DIR__ . "/bootstrap/whisper.php";

use Abyss\Whisper\MakeController;
use Abyss\Whisper\MakeFactory;
use Abyss\Whisper\MakeMigration;
use Abyss\Whisper\MakeModel;
use Abyss\Whisper\MigrationRunner;
use Abyss\Whisper\SeedDatabase;
use Abyss\Whisper\Serve;

// Capture command-line arguments
$command = $argv[1] ?? null;

switch ($command) {
    case "serve":
        // Start the Abyss server
        new Serve()->handle();
        break;
    case "migrate":
        // Call the migration runner
        new MigrationRunner()->run();
        break;
    case "seed":
        // Call the migration runner
        new SeedDatabase()->run();
        break;
    case "make:migration":
        // * Create a migration
        new MakeMigration($argv)->make();
        break;
    case "make:factory":
        new MakeFactory($argv)->make();
        break;
    case "make:model":
        new MakeModel($argv)->make();
        break;
    case "make:controller":
        new MakeController($argv)->make();
        break;
    case "help":
        echo "Available commands are:\n";
        echo "serve\n";
        echo "migrate\n";
        echo "seed\n";
        echo "make:migration {table_name}\n";
        echo "make:factory {table_name}\n";
        echo "make:model {table_name}\n";
        echo "make:controller {table_name}\n";

        break;
    default:
        echo "Unknown command: $command\n";
        echo "Available commands are:\n";
        echo "help\n";
        echo "serve\n";
        echo "migrate\n";
        echo "seed\n";
        echo "make:migration {table_name}\n";
        echo "make:factory {table_name}\n";
        echo "make:model {table_name}\n";
        echo "make:controller {table_name}\n";

        break;
}

