from fastapi import APIRouter, Depends, File, UploadFile, HTTPException
from sqlalchemy.orm import Session
from app.db.session import SessionLocal
from app.crud.designs import create_design, get_design, get_designs, delete_design
from app.schemas.design import DesignOut

router = APIRouter()

# Dependency
def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@router.post("/upload", response_model=DesignOut)
def upload_design(file: UploadFile = File(...), uploader_user_id: int | None = None, notes: str | None = None, db: Session = Depends(get_db)):
    try:
        design = create_design(db, file=file, uploader_user_id=uploader_user_id, notes=notes)
    except Exception as e:
        raise HTTPException(status_code=500, detail=str(e))
    return design

@router.get("/", response_model=list[DesignOut])
def list_designs(skip: int = 0, limit: int = 100, db: Session = Depends(get_db)):
    return get_designs(db, skip=skip, limit=limit)

@router.get("/{design_id}", response_model=DesignOut)
def get_design_endpoint(design_id: int, db: Session = Depends(get_db)):
    d = get_design(db, design_id)
    if not d:
        raise HTTPException(status_code=404, detail="Design not found")
    return d

@router.delete("/{design_id}")
def delete_design_endpoint(design_id: int, db: Session = Depends(get_db)):
    d = get_design(db, design_id)
    if not d:
        raise HTTPException(status_code=404, detail="Design not found")
    delete_design(db, d)
    return {"ok": True}
