from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool

from app.db.base import Base
from app.api.main import app
from app.api.routers import inventory as inventory_router

engine = create_engine(
    "sqlite://",
    connect_args={"check_same_thread": False},
    poolclass=StaticPool,
    future=True,
)
TestingSessionLocal = sessionmaker(bind=engine)
Base.metadata.create_all(bind=engine)


def override_get_db():
    db = TestingSessionLocal()
    try:
        yield db
    finally:
        db.close()

app.dependency_overrides[inventory_router.get_db] = override_get_db
client = TestClient(app)


def test_create_and_get_inventory_item_api():
    payload = {"name": "Tinta Magenta", "sku": "INK-MAG", "type": "ink", "unit": "ml", "quantity_on_hand": 500}
    r = client.post("/inventory/", json=payload)
    assert r.status_code == 200
    data = r.json()
    assert data["id"] is not None

    item_id = data["id"]
    r2 = client.get(f"/inventory/{item_id}")
    assert r2.status_code == 200
    data2 = r2.json()
    assert data2["name"] == payload["name"]
