import type { Database, Transaction } from '@platform-modules/db'
import type { InventorySchema } from './schema.js'
import type { MovementResult } from './types.js'
import { postMovement } from './internal/post-movement.js'
import { withInventoryTransaction } from './internal/public-helpers.js'

export interface PostAdjustmentInput {
  readonly tenantId: string
  readonly itemId: string
  readonly locationId: string
  readonly qtyDelta: number
  readonly unitCost?: number
  readonly reason: string
  readonly occurredAt: Date
}

export async function postAdjustment(
  db: Database<InventorySchema> | Transaction<InventorySchema>,
  input: PostAdjustmentInput,
): Promise<MovementResult> {
  return withInventoryTransaction(db, async (tx) =>
    postMovement(tx, {
      tenantId: input.tenantId,
      itemId: input.itemId,
      locationId: input.locationId,
      kind: 'adjust',
      qtyDelta: input.qtyDelta,
      unitCost: input.unitCost,
      holderRef: input.reason,
      occurredAt: input.occurredAt,
    }),
  )
}
