<?php

namespace App\Http\Requests\Admin;

use App\Http\Requests\Admin\Concerns\AgentProfileFieldRules;
use App\Http\Requests\ApiFormRequest;

final class AdminAgentProfileUpdateRequest extends ApiFormRequest
{
    use AgentProfileFieldRules;

    public function authorize(): bool
    {
        $admin = $this->user();
        if (! $admin instanceof \App\Models\AdminUser) {
            return false;
        }

        $agentNode = $this->route('agent_node');
        if (! $agentNode instanceof \App\Models\AgentNode) {
            return false;
        }

        if (! \App\Support\AdminAgentScope::nodeVisibleTo($admin, $agentNode)) {
            return false;
        }

        if (! \App\Support\AdminAgentScope::nodeProfileEditableBy($admin, $agentNode)) {
            return false;
        }

        return true;
    }

    protected function failedAuthorization(): void
    {
        abort(403, 'admin.permission_denied');
    }

    protected function prepareForValidation(): void
    {
        $this->prepareAgentProfileFieldsForValidation();
    }

    /** @return array<string, mixed> */
    public function rules(): array
    {
        return $this->agentProfileFieldRules();
    }
}
