<?php

namespace App\Tests\Audit;

use App\Auth\Entity\PreRegistration;
use App\Tests\ApiTestCase;

/**
 * Low-tier audit fixes:
 *  L1  — PATCH /session enforces the patient_records subscription gate.
 *  L11 — POST /pre-registration returns 201 (resource created).
 */
class LowTierFixesTest extends ApiTestCase
{
    public function testUpdateSessionEnforcesPatientGate(): void
    {
        // ROLE_DOCTOR بدون رکورد Doctor → resolveEntity مقدار entityId=null می‌دهد
        // و گیت با ERR_FORBIDDEN_001 رد می‌کند. (به features پلن وابسته نیست: پلن
        // free از Version20260705070546 به بعد patient_records را می‌دهد.)
        $doctorUser = $this->createUser(['ROLE_DOCTOR']);

        // gate fires before the session lookup → 403 (not 404)
        $this->authJson('PATCH', '/api/v1/session/nonexistent-uuid', $doctorUser, ['notes' => 'x']);

        $this->assertSame(403, $this->responseCode());
    }

    public function testPreRegistrationReturns201(): void
    {
        $mobile = '0912' . str_pad((string) random_int(0, 9_999_999), 7, '0', STR_PAD_LEFT);
        $this->client->request(
            'POST',
            '/api/v1/pre-registration',
            server: ['CONTENT_TYPE' => 'application/json'],
            content: json_encode([
                'type'   => PreRegistration::TYPE_INDEPENDENT_DOCTOR,
                'name'   => 'علی محمدی',
                'mobile' => $mobile,
            ]),
        );

        $this->assertSame(201, $this->client->getResponse()->getStatusCode());
    }
}
