<?php

namespace App\Http\Controllers\Api\V1\Admin\Agent;

use App\Models\AdminRole;
use App\Models\AgentNode;
use App\Support\ApiResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use App\Http\Controllers\Controller;
use App\Support\AdminAgentNodeAccess;
use App\Support\AdminRoleApiPresenter;

final class AgentNodeRoleIndexController extends Controller
{
    public function __invoke(Request $request, AgentNode $agent_node): JsonResponse
    {
        $admin = $request->lotteryAdmin();
        abort_if($admin === null, 401);

        $denied = AdminAgentNodeAccess::denyUnlessNodeVisible($admin, $agent_node);
        if ($denied !== null) {
            return $denied;
        }

        $roles = AdminRole::query()
            ->where('scope_type', AdminRole::SCOPE_AGENT)
            ->where('owner_agent_id', $agent_node->id)
            ->orderBy('sort_order')
            ->orderBy('id')
            ->get();

        return ApiResponse::success([
            'agent_node_id' => (int) $agent_node->id,
            'items' => $roles->map(static fn (AdminRole $role): array => AdminRoleApiPresenter::item($role))->all(),
        ]);
    }
}
