<?php

declare(strict_types=1);

namespace App\Services\Pd;

use Illuminate\Support\Facades\DB;

/**
 * Запись в pd_processing_log (152-ФЗ ст.18 ч.2). Hash-chain trigger
 * audit_chain_hash() автоматически заполняет log_hash; append-only
 * защита — триггер audit_block_mutation (UPDATE/DELETE заблокированы).
 *
 * chk_pd_actor: ровно один актор из tenant_user/admin, либо оба NULL
 * (системное действие — cron / триггер).
 */
final class PdAuditLogger
{
    /** @param string $action one of 'created','viewed','updated','deleted','exported' */
    public function record(
        string $action,
        ?string $subjectType,
        ?int $subjectId,
        string $purpose,
        ?int $tenantId,
        ?int $actorTenantUserId,
        ?int $actorAdminUserId,
        ?string $ip,
    ): void {
        DB::table('pd_processing_log')->insert([
            'tenant_id' => $tenantId,
            'subject_type' => $subjectType,
            'subject_id' => $subjectId,
            'action' => $action,
            'purpose' => $purpose,
            'actor_tenant_user_id' => $actorTenantUserId,
            'actor_admin_user_id' => $actorAdminUserId,
            'ip_address' => $ip,
            'created_at' => now(),
        ]);
    }
}
