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

declare(strict_types=1);

use Delight\Auth\Role;
use Delight\Auth\Administration;
use FeedManager\Support\DotenvLoader;
use FeedManager\Support\PdoFactory;

require_once __DIR__ . '/../bootstrap.php';

$email = $argv[1] ?? null;
$password = $argv[2] ?? null;

if (!is_string($email) || !is_string($password) || trim($email) === '' || trim($password) === '') {
    fwrite(STDERR, "Usage: php bin/user-create-admin <email> <password>\n");
    exit(1);
}

try {
    DotenvLoader::load(__DIR__ . '/../.env');

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

    $loaded = false;
    foreach ($autoloadCandidates as $path) {
        if (is_file($path)) {
            require_once $path;
            $loaded = true;
            break;
        }
    }

    if (!$loaded) {
        throw new RuntimeException('Could not load Composer autoload for delight-im/auth');
    }

    $pdo = PdoFactory::fromEnv();
    $admin = new Administration($pdo);
    $userId = $admin->createUser($email, $password, null);
    $admin->addRoleForUserById($userId, Role::ADMIN);
    $stmt = $pdo->prepare('INSERT INTO fm_user_roles (user_id, role) VALUES (:user_id, :role) ON DUPLICATE KEY UPDATE role = VALUES(role)');
    $stmt->execute(['user_id' => $userId, 'role' => 'admin']);

    fwrite(STDOUT, sprintf("Created admin user %s (id=%d)\n", $email, $userId));
    exit(0);
} catch (Throwable $e) {
    fwrite(STDERR, sprintf("Failed to create user: %s\n", $e->getMessage()));
    exit(1);
}
