import sqlite3
SCHEMA="""CREATE TABLE stock(tenant TEXT,sku TEXT,qty INTEGER,PRIMARY KEY(tenant,sku)); CREATE TABLE reservations(request_id TEXT PRIMARY KEY,tenant TEXT,sku TEXT,qty INTEGER);"""
async def reserve(db,tenant,request_id,sku,qty,after_check):
    prior=db.execute('SELECT qty FROM reservations WHERE request_id=?',(request_id,)).fetchone()
    if prior: return 'duplicate'
    available=db.execute('SELECT qty FROM stock WHERE tenant=? AND sku=?',(tenant,sku)).fetchone()[0]
    if available<qty: return 'insufficient'
    await after_check()
    with db:
        db.execute('UPDATE stock SET qty=qty-? WHERE tenant=? AND sku=?',(qty,tenant,sku))
        db.execute('INSERT INTO reservations VALUES(?,?,?,?)',(request_id,tenant,sku,qty))
    return 'reserved'
