<?php

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

use App\Models\AdminUser;
use App\Models\AgentNode;
use App\Support\ApiResponse;
use Illuminate\Http\Request;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Facades\DB;
use App\Http\Controllers\Controller;
use App\Support\AdminAgentNodeAccess;
use App\Support\AdminUserApiPresenter;

final class AgentNodeAdminUserIndexController 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;
        }

        $userIds = DB::table('admin_user_agents')
            ->where('agent_node_id', $agent_node->id)
            ->pluck('admin_user_id');

        $users = AdminUser::query()
            ->whereIn('id', $userIds)
            ->orderBy('username')
            ->get();

        return ApiResponse::success([
            'agent_node_id' => (int) $agent_node->id,
            'items' => $users->map(static fn (AdminUser $user): array => AdminUserApiPresenter::listItem($user))->all(),
        ]);
    }
}
