#!/usr/bin/env php
<?php

declare(strict_types=1);

// AiEngine operator CLI (no Laravel, no core). Usage:
//   php bin/aiengine status
//   php bin/aiengine providers
//   php bin/aiengine parse --query="cheap laravel developer in Bangladesh under $300"

spl_autoload_register(static function (string $class): void {
    if (str_starts_with($class, 'AiEngine\\')) {
        $file = __DIR__ . '/../src/' . str_replace('\\', '/', substr($class, 9)) . '.php';
        if (is_file($file)) {
            require $file;
        }
    }
});

use AiEngine\IntentParser;
use AiEngine\Settings;

$command = $argv[1] ?? 'help';
$opts = [];
foreach (array_slice($argv, 2) as $arg) {
    if (str_starts_with($arg, '--')) {
        $pair = explode('=', substr($arg, 2), 2);
        $opts[$pair[0]] = $pair[1] ?? true;
    }
}

switch ($command) {
    case 'status':
        $settings = new Settings();
        echo 'engine: ' . ($settings->enabled() ? 'enabled' : 'disabled') . "\n";
        echo "llm intent: " . ($settings->llmEnabled('intent') ? 'on' : 'off') . "\n";
        echo "llm rerank: " . ($settings->llmEnabled('rerank') ? 'on' : 'off') . "\n";
        echo 'default provider: ' . $settings->provider() . "\n";
        echo 'recommend limit: ' . $settings->limit('recommend_limit', 6) . "\n";
        echo 'min score: ' . $settings->floatLimit('min_score', 0.15) . "\n";
        foreach ($settings->weights() as $key => $value) {
            echo "weight {$key}: {$value}\n";
        }
        break;

    case 'providers':
        echo implode("\n", array_keys(Settings::PRESETS)) . "\n";
        break;

    case 'parse':
        $query = (string) ($opts['query'] ?? '');
        if ($query === '') {
            fwrite(STDERR, "error: --query is required\n");
            exit(1);
        }
        $intent = (new IntentParser())->parse($query);
        echo json_encode($intent->toArray(), JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . "\n";
        break;

    default:
        echo "usage: aiengine {status|providers|parse --query=\"...\"}\n";
        exit($command === 'help' ? 0 : 1);
}
