<?php
declare(strict_types=1);

namespace Celena\Module\Ai;

use Celena\Core\Ai\AiManager;
use Celena\Core\Http\Request;
use Celena\Core\Http\Response;
use Celena\Core\Security\Auth;
use Celena\Core\Security\Csrf;
use Celena\Core\Security\Permission;

/**
 * POST /admin/api/ai/run — выполнить AI-задачу и вернуть результат в JSON.
 * Все вызовы проходят через одну точку: меньше логики копипаста в клиенте.
 */
final class AiController
{
    public function __construct(
        private readonly Auth $auth,
        private readonly AiManager $ai,
    ) {
    }

    public function run(Request $request): Response
    {
        if (!Permission::can($this->auth->user(), 'ai.use')) {
            return Response::json(['error' => 'forbidden'], 403);
        }
        $token = (string) ($request->header('x-csrf-token') ?? $request->input('_csrf'));
        if (!Csrf::validate($token)) {
            return Response::json(['error' => 'csrf'], 403);
        }
        $task = (string) $request->input('task', '');
        if (!$this->ai->hasTask($task)) {
            return Response::json(['error' => 'unknown_task'], 400);
        }
        $args = (array) $request->input('args', []);
        try {
            $result = $this->ai->run($task, $args);
            return Response::json(['ok' => true, 'result' => $result]);
        } catch (\Throwable $e) {
            return Response::json(['ok' => false, 'error' => $e->getMessage()], 500);
        }
    }
}
