/**
 * uniform_export_jobs schema — uniform-format-export (wave-13, spec 180).
 * Tracks async Israeli Tax Authority "uniform structure" (מבנה אחיד) export jobs.
 */
import { pgTable, uuid, text, date, timestamp, jsonb, check } from 'drizzle-orm/pg-core'
import { sql } from 'drizzle-orm'
import { tenants } from './tenants'
import { users } from './users'

export const uniformExportJobs = pgTable(
  'uniform_export_jobs',
  {
    id: uuid('id').primaryKey().defaultRandom(),
    tenantId: uuid('tenant_id')
      .notNull()
      .references(() => tenants.id, { onDelete: 'cascade' }),
    periodFrom: date('period_from').notNull(),
    periodTo: date('period_to').notNull(),
    mode: text('mode').notNull(),
    status: text('status').notNull().default('pending'),
    recordCounts: jsonb('record_counts'),
    r2Key: text('r2_key'),
    downloadExpiresAt: timestamp('download_expires_at', { withTimezone: true }),
    errorMessage: text('error_message'),
    generatedBy: uuid('generated_by').references(() => users.id, { onDelete: 'set null' }),
    createdAt: timestamp('created_at', { withTimezone: true }).notNull().defaultNow(),
  },
  (t) => ({
    modeCheck: check(
      'uniform_export_jobs_mode_check',
      sql`${t.mode} IN ('documents','documents_journal')`,
    ),
    statusCheck: check(
      'uniform_export_jobs_status_check',
      sql`${t.status} IN ('pending','running','done','error')`,
    ),
  }),
)

export type UniformExportJobRow = typeof uniformExportJobs.$inferSelect
export type NewUniformExportJob = typeof uniformExportJobs.$inferInsert
