import { describe, expect, it } from 'vitest'
import {
  auditLog,
  auditSchema,
  decodeCursor,
  encodeCursor,
  InvalidCursorError,
  listAudit,
  logAudit,
} from './index.js'
import type {
  AuditCursor,
  AuditEvent,
  AuditRecord,
  AuditSchema,
  ListAuditFilter,
  ListAuditResult,
  LogAuditResult,
} from './index.js'

describe('@platform-modules/audit barrel', () => {
  it('exports runtime symbols', () => {
    expect(logAudit).toBeTypeOf('function')
    expect(listAudit).toBeTypeOf('function')
    expect(encodeCursor).toBeTypeOf('function')
    expect(decodeCursor).toBeTypeOf('function')
    expect(InvalidCursorError).toBeTypeOf('function')
    expect(auditLog).toBeDefined()
    expect(auditSchema).toBeDefined()
  })

  it('exports type-only symbols at compile time', () => {
    const _event: AuditEvent = {
      action: 'x',
      entityType: 'y',
      entityId: 'z',
    }
    const _result: LogAuditResult = { logged: true }
    const _record: AuditRecord = {
      id: 'id',
      actorId: null,
      actorType: null,
      actorLabel: null,
      action: 'x',
      entityType: 'y',
      entityId: 'z',
      metadata: null,
      ip: null,
      tenantId: null,
      createdAt: new Date(),
    }
    const _filter: ListAuditFilter = { limit: 1 }
    const _list: ListAuditResult = { items: [], nextCursor: null }
    const _cursor: AuditCursor = { createdAt: '2026-01-01T00:00:00.000Z', id: 'id' }
    const _schema: AuditSchema = auditSchema

    expect(_event.action).toBe('x')
    expect(_result.logged).toBe(true)
    expect(_record.id).toBe('id')
    expect(_filter.limit).toBe(1)
    expect(_list.items).toEqual([])
    expect(_cursor.id).toBe('id')
    expect(_schema.auditLog).toBe(auditLog)
  })
})
