"""End-to-end smoke test for the NPL service. Cleans up after itself."""
from datetime import date

from sqlalchemy import text

from backend.models.database import SessionLocal
from backend.schemas.npl import NplProductCreate, NplStockAllocationCreate
from backend.services.npl_service import NplService


def main() -> None:
    db = SessionLocal()
    svc = NplService(db)

    db.execute(text(
        "DELETE FROM npl_products WHERE sku LIKE 'NPL-TEST-%'"
    ))
    db.commit()

    p = svc.create(NplProductCreate(
        sku="NPL-TEST-001",
        name="Test product A",
        group_enum="supplement",
        channels=["mp"],
        launch_date=date(2026, 9, 1),
        barcode="1234567890",
        supplier_id=1,
        cost_price=12.50,
        lead_time_weeks=4,
        safety_buffer_weeks=2,
        stock_allocation=[
            NplStockAllocationCreate(
                channel="mp", safety_qty=100, stocking_qty=500,
            ),
        ],
    ), user_id=1)
    print(f"created id={p.id} sku={p.sku} fmb={p.fmb_date} "
          f"status={p.status} allocs={len(p.stock_allocation)}")
    assert p.status == "draft"
    assert p.fmb_date is not None

    r = svc.approve(p.id, user_id=1)
    print(f"approve -> status={r.status}")
    assert r.status == "approved"

    fmb = svc.run_fmb_check()
    print(f"fmb sweep checked={fmb.checked} triggered={len(fmb.triggered)}")

    lst = svc.list_products()
    print(f"list total={lst.total} by_status={lst.by_status}")

    d = svc.dashboard_summary()
    print(f"dashboard total_npl={d.total_npl}")

    svc.delete(p.id)
    print("deleted OK")
    db.close()


if __name__ == "__main__":
    main()
