import { useCallback, useState } from 'react'; import { audit } from '../services/audit.service'; import { AuditEventOptions, AuditEvent, AuditError } from '../types'; export function useAuditLog() { const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [lastEvent, setLastEvent] = useState(null); const log = useCallback(async (options: AuditEventOptions): Promise => { setLoading(true); setError(null); try { const event = await audit.log(options); setLastEvent(event); return event; } catch (err: any) { const auditError: AuditError = { code: err.code || 'audit/log-failed', message: err.message || 'Failed to log audit event', originalError: err, }; setError(auditError); throw auditError; } finally { setLoading(false); } }, []); const logAction = useCallback(async ( action: string, resourceType: string, resourceId: string, metadata?: any ): Promise => { return log({ action, resource: { type: resourceType, id: resourceId, }, metadata, }); }, [log]); const logSuccess = useCallback(async ( action: string, resource: any, changes?: any ): Promise => { return log({ action, resource, result: 'success', changes, }); }, [log]); const logFailure = useCallback(async ( action: string, resource: any, error: any ): Promise => { return log({ action, resource, result: 'failure', metadata: { error: error.message || error, errorCode: error.code, }, }); }, [log]); return { log, logAction, logSuccess, logFailure, loading, error, lastEvent, }; }