import { randomUUID } from 'crypto';
import { readPersistentDataFile, writePersistentDataFile } from './local-store';

export type AgentDentalKnowledgeAuditEntry = {
  id: string;
  articleId: string;
  articleTitle: string;
  action: 'CREATED' | 'UPDATED' | 'DELETED' | 'RESTORED';
  actorUserId: string;
  actorName: string;
  actorRole: string;
  createdAt: string;
};

const auditFileName = 'agent-dental-knowledge-audit.json';

const defaultAuditEntries = () => [] as AgentDentalKnowledgeAuditEntry[];

export const listAgentDentalKnowledgeAuditEntries = async (limit = 20) => {
  const entries = await readPersistentDataFile<AgentDentalKnowledgeAuditEntry[]>(auditFileName, defaultAuditEntries);
  return [...entries]
    .sort((left, right) => Date.parse(right.createdAt) - Date.parse(left.createdAt))
    .slice(0, Math.max(1, Math.min(limit, 50)));
};

export const appendAgentDentalKnowledgeAuditEntry = async (
  input: Omit<AgentDentalKnowledgeAuditEntry, 'id' | 'createdAt'>,
) => {
  const entries = await readPersistentDataFile<AgentDentalKnowledgeAuditEntry[]>(auditFileName, defaultAuditEntries);

  const entry: AgentDentalKnowledgeAuditEntry = {
    id: randomUUID(),
    articleId: input.articleId,
    articleTitle: input.articleTitle,
    action: input.action,
    actorUserId: input.actorUserId,
    actorName: input.actorName,
    actorRole: input.actorRole,
    createdAt: new Date().toISOString(),
  };

  const nextEntries = [entry, ...entries]
    .sort((left, right) => Date.parse(right.createdAt) - Date.parse(left.createdAt))
    .slice(0, 120);

  await writePersistentDataFile(auditFileName, nextEntries);
  return entry;
};
