from sqlalchemy.orm import Session
from typing import Optional, List
from .models import Submission


def get_by_id(db: Session, entity_id: str) -> Optional[Submission]:
    return db.query(Submission).filter(Submission.id == entity_id).first()


def list_all(db: Session, limit: int = 20, offset: int = 0, **filters) -> List[Submission]:
    query = db.query(Submission)
    return query.order_by(Submission.created_at.desc()).limit(limit).offset(offset).all()


def create(db: Session, data: dict) -> Submission:
    submission = Submission(**data)
    db.add(submission)
    db.flush()
    return submission


def update(db: Session, entity_id: str, data: dict) -> Optional[Submission]:
    submission = get_by_id(db, entity_id)
    if not submission:
        return None
    for key, value in data.items():
        setattr(submission, key, value)
    db.flush()
    return submission


def delete(db: Session, entity_id: str) -> bool:
    submission = get_by_id(db, entity_id)
    if not submission:
        return False
    db.delete(submission)
    db.flush()
    return True