import * as admin from 'firebase-admin';
import * as functions from 'firebase-functions';
import { AuditLogEntry, AuditAction, ReviewDocumentStatus } from './types/review';

export async function writeAuditLog(params: {
  docId: string;
  action: AuditAction;
  actorId: string;
  actorName?: string;
  previousStatus?: ReviewDocumentStatus;
  newStatus?: ReviewDocumentStatus;
  metadata?: Record<string, unknown>;
}): Promise<string> {
  const db = admin.firestore();
  const logRef = db
    .collection('documents')
    .doc(params.docId)
    .collection('auditLogs')
    .doc();

  const entry: Omit<AuditLogEntry, 'id'> = {
    docId: params.docId,
    action: params.action,
    actorId: params.actorId,
    actorName: params.actorName,
    previousStatus: params.previousStatus,
    newStatus: params.newStatus,
    metadata: params.metadata,
    createdAt: admin.firestore.Timestamp.now(),
  };

  await logRef.set({ id: logRef.id, ...entry });

  // Cloud Logging 이중화 (structured log)
  functions.logger.info('AUDIT_LOG', {
    severity: 'INFO',
    auditLogId: logRef.id,
    docId: params.docId,
    action: params.action,
    actorId: params.actorId,
    previousStatus: params.previousStatus,
    newStatus: params.newStatus,
    timestamp: new Date().toISOString(),
  });

  return logRef.id;
}
