<?php

namespace App\Services;

use App\Models\AuditLog;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Request;

class AuditService
{
    public function log(
        string $action,
        ?Model $subject = null,
        array $properties = [],
        ?int $companyId = null,
        ?int $actorUserId = null
    ): AuditLog {
        return AuditLog::withoutGlobalScopes()->create([
            'company_id' => $companyId ?? Auth::user()?->company_id,
            'actor_user_id' => $actorUserId ?? Auth::id(),
            'action' => $action,
            'subject_type' => $subject ? $subject->getMorphClass() : null,
            'subject_id' => $subject?->getKey(),
            'properties' => $properties === [] ? null : $properties,
            'ip_address' => Request::ip(),
            'user_agent' => Request::userAgent(),
            'created_at' => now(),
        ]);
    }
}
