import os
import uuid
from typing import Optional
from sqlalchemy.orm import Session
from fastapi import UploadFile
from app.models.design import Design

STATIC_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "static", "designs")


def get_design(db: Session, design_id: int):
    return db.query(Design).filter(Design.id == design_id).first()


def get_designs(db: Session, skip: int = 0, limit: int = 100):
    return db.query(Design).offset(skip).limit(limit).all()


def create_design(db: Session, file: UploadFile, uploader_user_id: Optional[int] = None, notes: Optional[str] = None):
    # ensure static dir exists
    os.makedirs(STATIC_DIR, exist_ok=True)
    ext = os.path.splitext(file.filename)[1]
    filename = f"{uuid.uuid4().hex}{ext}"
    path = os.path.join(STATIC_DIR, filename)

    # save file to disk
    with open(path, "wb") as f:
        f.write(file.file.read())

    design = Design(
        filename=f"static/designs/{filename}",
        original_filename=file.filename,
        mime_type=file.content_type,
        uploader_user_id=uploader_user_id,
        notes=notes,
    )
    db.add(design)
    db.commit()
    db.refresh(design)
    return design


def delete_design(db: Session, design: Design):
    # remove file
    try:
        file_path = os.path.join(os.path.dirname(os.path.dirname(__file__)), design.filename)
        if os.path.exists(file_path):
            os.remove(file_path)
    except Exception:
        pass
    db.delete(design)
    db.commit()
    return True
