import { describe, expect, it } from 'vitest'
import { walletVesting } from './vesting-schema.js'
import { createTestDb } from './test-fixture.js'

describe('wallet_vesting schema', () => {
  it('defaults all buckets to 0n', async () => {
    const db = await createTestDb()
    await db.insert(walletVesting).values({ ownerId: 'u1' })
    const [row] = await db.select().from(walletVesting)
    expect(row).toMatchObject({
      pendingMinor: 0n, maturedMinor: 0n, carriedDebtMinor: 0n, withdrawableMinor: 0n, lifetimeEarnedMinor: 0n,
    })
  })

  it('rejects negative pendingMinor (nonneg CHECK backstop)', async () => {
    const db = await createTestDb()
    await expect(
      db.insert(walletVesting).values({ ownerId: 'u2', pendingMinor: -1n }),
    ).rejects.toThrow()
  })

  it('rejects negative withdrawableMinor', async () => {
    const db = await createTestDb()
    await expect(
      db.insert(walletVesting).values({ ownerId: 'u3', withdrawableMinor: -1n }),
    ).rejects.toThrow()
  })

  it('rejects negative maturedMinor (over-debit compensation backstop)', async () => {
    const db = await createTestDb()
    await expect(
      db.insert(walletVesting).values({ ownerId: 'u4', maturedMinor: -1n }),
    ).rejects.toThrow()
  })

  it('rejects negative carriedDebtMinor', async () => {
    const db = await createTestDb()
    await expect(
      db.insert(walletVesting).values({ ownerId: 'u5', carriedDebtMinor: -1n }),
    ).rejects.toThrow()
  })
})
