import { describe, expect, it } from 'vitest'
import { stockCostLayer, stockItem, stockLocation, stockMovement, stockPosition } from './schema.js'

describe('inventory schema', () => {
  it('defines the five inventory tables with the spec column names', () => {
    expect(((stockLocation as unknown) as Record<PropertyKey, unknown>)[Symbol.for('drizzle:Name')]).toBe('stock_location')
    expect(((stockItem as unknown) as Record<PropertyKey, unknown>)[Symbol.for('drizzle:Name')]).toBe('stock_item')
    expect(((stockMovement as unknown) as Record<PropertyKey, unknown>)[Symbol.for('drizzle:Name')]).toBe('stock_movement')
    expect(((stockCostLayer as unknown) as Record<PropertyKey, unknown>)[Symbol.for('drizzle:Name')]).toBe('stock_cost_layer')
    expect(((stockPosition as unknown) as Record<PropertyKey, unknown>)[Symbol.for('drizzle:Name')]).toBe('stock_position')

    expect(Object.keys(stockLocation)).toEqual(
      expect.arrayContaining([
        'id',
        'tenantId',
        'name',
        'code',
        'isDefault',
        'isActive',
        'createdAt',
        'updatedAt',
      ]),
    )
    expect(Object.keys(stockItem)).toEqual(
      expect.arrayContaining([
        'id',
        'tenantId',
        'sku',
        'name',
        'uom',
        'method',
        'isActive',
        'createdAt',
        'updatedAt',
      ]),
    )
    expect(Object.keys(stockMovement)).toEqual(
      expect.arrayContaining([
        'id',
        'tenantId',
        'itemId',
        'locationId',
        'kind',
        'qtyDelta',
        'unitCost',
        'cogsAmount',
        'pendingCost',
        'holderRef',
        'transferGroup',
        'occurredAt',
        'createdAt',
      ]),
    )
    expect(Object.keys(stockCostLayer)).toEqual(
      expect.arrayContaining([
        'id',
        'tenantId',
        'itemId',
        'locationId',
        'receiptMovementId',
        'unitCost',
        'qtyRemaining',
        'createdAt',
      ]),
    )
    expect(Object.keys(stockPosition)).toEqual(
      expect.arrayContaining([
        'tenantId',
        'itemId',
        'locationId',
        'qtyOnHand',
        'avgUnitCost',
        'updatedAt',
      ]),
    )
  })
})
