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

/**
 * CLI:
 *   php bin/console install            # creates tables + default settings + demo content
 *   php bin/console migrate            # creates tables only
 *   php bin/console seed               # default settings + demo catalogue
 *   php bin/console demo               # sample orders/customers/reviews (for testing & client demo)
 *   php bin/console make:admin "Nume" email@x.com parola [owner|manager|staff]
 *   php bin/console cron               # runs scheduled jobs (abandoned carts, stock alerts, tracking queue)
 *   php bin/console rates:update       # refresh GBP→EUR/RON rates (ECB)
 */
require dirname(__DIR__) . '/app/bootstrap.php';

use App\Core\DB;
use App\Services\Installer;
use App\Services\Cron;
use App\Services\Rates;

$cmd = $argv[1] ?? 'help';
$args = array_slice($argv, 2);

try {
    switch ($cmd) {
        case 'install':
            Installer::migrate();
            Installer::seed();
            echo "OK: schema + seed.\n";
            if (!DB::scalar('SELECT COUNT(*) FROM admin_users')) {
                echo "Creează primul administrator:\n  php bin/console make:admin \"Nume\" email@domeniu.ro ParolaPuternica owner\n";
            }
            break;
        case 'migrate':
            Installer::migrate();
            echo "OK: schema.\n";
            break;
        case 'seed':
            Installer::seed();
            echo "OK: seed.\n";
            break;
        case 'demo':
            require APP_ROOT . '/database/demo.php';
            break;
        case 'make:admin':
            [$name, $email, $password] = [$args[0] ?? null, $args[1] ?? null, $args[2] ?? null];
            $role = $args[3] ?? 'owner';
            if (!$name || !$email || !$password) {
                fwrite(STDERR, "Utilizare: make:admin \"Nume\" email parola [rol]\n");
                exit(1);
            }
            Installer::makeAdmin($name, $email, $password, $role);
            echo "OK: admin $email ($role).\n";
            break;
        case 'cron':
            $report = Cron::run();
            foreach ($report as $k => $v) {
                echo str_pad($k, 28) . $v . "\n";
            }
            break;
        case 'rates:update':
            $rates = Rates::update();
            echo "OK: " . json_encode($rates) . "\n";
            break;
        default:
            echo file_get_contents(__FILE__) === false ? '' : preg_replace('/^.*?\/\*\*(.*?)\*\/.*$/s', '$1', file_get_contents(__FILE__));
    }
} catch (Throwable $e) {
    fwrite(STDERR, get_class($e) . ': ' . $e->getMessage() . "\n" . $e->getTraceAsString() . "\n");
    exit(1);
}
