<?php

namespace App\Services;

use App\Models\Document;
use App\Models\User;
use Illuminate\Support\Facades\Log;

/**
 * 安全日志记录服务
 * 用于记录系统中的安全相关事件
 */
class SecurityLogger
{
    /**
     * 记录未授权的文档访问尝试
     * 需求：7.3
     * 
     * @param User $user 尝试访问的用户
     * @param Document $document 被访问的文档
     * @param string $action 尝试的操作 (view, download, update, delete 等)
     * @param string|null $ipAddress IP 地址
     * @return void
     */
    public function logUnauthorizedAccess(
        User $user,
        Document $document,
        string $action,
        ?string $ipAddress = null
    ): void {
        $ipAddress = $ipAddress ?? request()->ip();
        
        Log::channel('security')->warning('未授权访问尝试', [
            'event' => 'unauthorized_access',
            'action' => $action,
            'user_id' => $user->id,
            'user_name' => $user->name,
            'user_email' => $user->email,
            'document_id' => $document->id,
            'document_title' => $document->title,
            'document_knowledge_base_id' => $document->knowledge_base_id,
            'ip_address' => $ipAddress,
            'timestamp' => now()->toIso8601String(),
            'user_agent' => request()->userAgent(),
        ]);
    }

    /**
     * 记录权限验证失败
     * 
     * @param User $user 用户
     * @param string $resource 资源类型
     * @param int|null $resourceId 资源 ID
     * @param string $action 操作
     * @param string|null $reason 失败原因
     * @return void
     */
    public function logAuthorizationFailure(
        User $user,
        string $resource,
        ?int $resourceId,
        string $action,
        ?string $reason = null
    ): void {
        Log::channel('security')->warning('权限验证失败', [
            'event' => 'authorization_failure',
            'user_id' => $user->id,
            'user_name' => $user->name,
            'user_email' => $user->email,
            'resource' => $resource,
            'resource_id' => $resourceId,
            'action' => $action,
            'reason' => $reason,
            'ip_address' => request()->ip(),
            'timestamp' => now()->toIso8601String(),
            'user_agent' => request()->userAgent(),
        ]);
    }

    /**
     * 记录可疑的访问模式
     * 
     * @param User $user 用户
     * @param string $pattern 可疑模式描述
     * @param array $context 额外的上下文信息
     * @return void
     */
    public function logSuspiciousActivity(
        User $user,
        string $pattern,
        array $context = []
    ): void {
        Log::channel('security')->alert('检测到可疑活动', array_merge([
            'event' => 'suspicious_activity',
            'user_id' => $user->id,
            'user_name' => $user->name,
            'user_email' => $user->email,
            'pattern' => $pattern,
            'ip_address' => request()->ip(),
            'timestamp' => now()->toIso8601String(),
            'user_agent' => request()->userAgent(),
        ], $context));
    }
}
