/// <reference types="node" />

export { createDb } from './client'
export type { Db, DbTx } from './client'
export { sql, count, and, gte, lte, lt, gt, isNull, isNotNull, or, eq, ne, desc, asc, inArray, notInArray, between } from 'drizzle-orm'
export { tenantQuery, systemQuery } from './queries'
export type { TenantQueryResult, SystemQueryResult } from './queries'

// foundation-auth-rbac query helpers (usage metering, RBAC seed, quota config)
export { incrementCounter, checkCounterLimit, QuotaExceededError } from './queries'
export { getQuotaLimit } from './queries'
export { seedPermissions, seedSystemRoles } from './queries'

// admin-dashboard: public tax-rate lookup
export { getTaxRate } from './queries'

// tenant-audit-log: direct access
export { tenantAuditLog } from './schema/audit'
export type { TenantAuditLogRow, NewTenantAuditLog } from './schema/audit'
export { logAuditEvent } from './queries/audit'
export { listAuditLog, fetchAuditLogForExport, purgeAuditLogByRetention } from './queries/audit-list'

// tasks-board-engine: fractional positioning + seed
export { positionBetween, needsRebalance, rebalanceColumn } from './lib/fractional-index'
export { seedTaskStatuses } from './seed/task-statuses'
export { tasks, taskStatuses } from './schema/tasks'

// wave-7: invoice-adapters — IL_INVOICE_PROVIDERS constant needed by cron route
export { IL_INVOICE_PROVIDERS } from './schema/invoice-adapters'
export type { ILInvoiceProvider } from './schema/invoice-adapters'

// projects/milestones route: direct table access for inline status check
export { invoices } from './schema/invoices'

// wave-12: activity-timeline — same-transaction writer helpers
export {
  appendInvoiceActivity,
  appendProjectActivity,
  appendCustomerActivity,
  appendVendorActivity,
} from './activities/writers'

// wave-13: kb-versioning — version table + query helpers
export { kbArticleVersions } from './schema/kb'
export type { KbArticleVersionRow, NewKbArticleVersion } from './schema/kb'
export {
  createArticleVersion,
  createArticleVersionWithRetry,
  listArticleVersions,
  getArticleVersion,
  restoreArticleVersion,
} from './queries/kb-versions'
export type {
  CreateArticleVersionInput,
  ArticleVersionSnapshot,
  ArticleVersionListItem,
  ArticleVersionFull,
  RestoreVersionResult,
} from './queries/kb-versions'

// wave-13: financial-statements — P&L and Cash Flow report services
export { getProfitLoss, getCashFlow } from './reports'
export type { ProfitLossReport, CashFlowReport } from './reports'

// wave-13: zapier-make-integration — table access for public-api routes
export { leads, leadActivities } from './schema/marketing'
export type { LeadRow, NewLead } from './schema/marketing'
export { timeEntries } from './schema/time'
export type { TimeEntryRow, NewTimeEntry } from './schema/time'
export { projects } from './schema/projects'
export { customers } from './schema/customers'
export { webhookEndpoints } from './schema/webhooks'
export { oauthClients } from './schema/oauth'

// wave-13: uniform-format-export (spec 180)
export { uniformExportJobs } from './schema/uniform-export-jobs'
export type { UniformExportJobRow, NewUniformExportJob } from './schema/uniform-export-jobs'
export { invoiceLines } from './schema/invoices'
export { receipts, receiptPaymentLines } from './schema/receipts'
export { tenants } from './schema/tenants'

// wave-15: accountant-export (spec 2026-06-01-accountant-export)
export { expenses } from './schema/expenses'
export { payoutBills } from './schema/contractors'

// wave-16: customer-statement (spec 183)
export { buildCustomerStatement, getCustomerBillingEmail } from './queries'
export type { BuildStatementInput } from './queries'
export { computeStatementAging } from './queries'
export type { OpenInvoiceForAging } from './queries'
