import { describe, expect, it } from 'vitest'
import { postReceipt } from '../post-receipt.js'
import { getOnHand, getValuation } from './on-hand-valuation.js'
import {
  AVG_ITEM_ID,
  FIFO_ITEM_ID,
  LOCATION_A,
  LOCATION_B,
  NOW,
  TENANT_ID,
  freshDb,
  seedItem,
  seedLocation,
} from '../test-helpers.js'

describe('on-hand and valuation reads', () => {
  it('reads on-hand by location and weighted-average valuation', async () => {
    const db = await freshDb()
    await seedLocation(db, LOCATION_A)
    await seedLocation(db, LOCATION_B)
    await seedItem(db, AVG_ITEM_ID, 'weighted_average')
    await seedItem(db, FIFO_ITEM_ID, 'fifo')

    await postReceipt(db, {
      tenantId: TENANT_ID,
      itemId: AVG_ITEM_ID,
      locationId: LOCATION_A,
      qty: 2,
      unitCost: 5,
      occurredAt: NOW,
    })
    await postReceipt(db, {
      tenantId: TENANT_ID,
      itemId: AVG_ITEM_ID,
      locationId: LOCATION_B,
      qty: 3,
      unitCost: 7,
      occurredAt: NOW,
    })

    const onHand = await getOnHand(db, {
      tenantId: TENANT_ID,
      itemId: AVG_ITEM_ID,
    })
    const valuation = await getValuation(db, {
      tenantId: TENANT_ID,
      itemId: AVG_ITEM_ID,
      asOf: new Date('2026-07-04T23:59:59.000Z'),
    })

    expect(onHand.qty).toBe('5')
    expect(onHand.byLocation).toHaveLength(2)
    expect(valuation.value).toBe('31')
  })
})
