from typing import Optional
from sqlmodel import Session, select
from app.models.user import User

class UserRepository:
    """Repository providing CRUD operations for User."""

    @staticmethod
    def get_by_email(session: Session, email: str) -> Optional[User]:
        stmt = select(User).where(User.email == email, User.is_deleted == False)
        return session.exec(stmt).first()

    @staticmethod
    def get_by_id(session: Session, user_id: int) -> Optional[User]:
        return session.get(User, user_id)

    @staticmethod
    def create(session: Session, user: User) -> User:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user

    @staticmethod
    def update(session: Session, user: User) -> User:
        session.add(user)
        session.commit()
        session.refresh(user)
        return user

    @staticmethod
    def soft_delete_user(session: Session, user: User) -> None:
        user.is_deleted = True
        session.add(user)
        session.commit()
        return True