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

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

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

      // Append-only — pas d'update sur cette table. Les events sont des
      // snapshots historiques, pas un état mutable.
      table
        .enum(
          'kind',
          ['relance_sent', 'invoice_paid', 'invoice_imported', 'warning_drafted'],
          { useNative: true, enumName: 'activity_event_kind' }
        )
        .notNullable()
      table.timestamp('at').notNullable()
      // Label HTML léger autorisé (<b> pour le nom client/numero) — sanitisé
      // côté serveur quand on construit le label, pas de user input direct.
      table.text('label').notNullable()
      // Méta jsonb : { invoiceId?, clientId?, ... } pour permettre au SPA
      // de cliquer sur l'event vers la facture/le client concerné.
      table.jsonb('meta').notNullable().defaultTo('{}')

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

      table.index(['organization_id', 'at'])
    })
  }

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