import { BaseSchema } from '@adonisjs/lucid/schema'

export default class extends BaseSchema {
  protected tableName = 'import_drafts'

  async up() {
    this.schema.createTable(this.tableName, (table) => {
      table.uuid('id').primary().notNullable().defaultTo(this.raw('gen_random_uuid()'))
      table
        .uuid('batch_id')
        .notNullable()
        .references('id')
        .inTable('import_batches')
        .onDelete('CASCADE')

      table.string('filename', 500).notNullable()
      // Clé MinIO du PDF source. Null en V1 mock (pas de fichier réel).
      table.string('pdf_storage_key', 500).nullable()

      // Champs extraits par l'OCR + version éditée par l'utilisateur +
      // confiance par champ (0-1). jsonb pour les 3 — flexibles, indexables
      // si besoin via GIN.
      table.jsonb('extracted').notNullable()
      table.jsonb('edited').notNullable()
      table.jsonb('confidence').notNullable().defaultTo('{}')

      table
        .enum('status', ['pending', 'validated', 'skipped'], {
          useNative: true,
          enumName: 'import_draft_status',
        })
        .notNullable()
        .defaultTo('pending')

      // Si validé, on lie l'invoice créée. SET NULL si l'invoice est purgée
      // (cas très limite, mais propre).
      table
        .uuid('invoice_id')
        .nullable()
        .references('id')
        .inTable('invoices')
        .onDelete('SET NULL')

      table.timestamp('created_at').notNullable()
      table.timestamp('updated_at').nullable()

      table.index(['batch_id'])
    })
  }

  async down() {
    this.schema.dropTable(this.tableName)
    this.schema.raw('DROP TYPE IF EXISTS import_draft_status')
  }
}
