from sqlmodel import Session, select
from datetime import datetime
from models.session import Session as SessionModel


class SessionRepository:

    def __init__(self, session: Session):
        self.session = session

    # CREATE
    def create(self, session_obj: SessionModel):
        self.session.add(session_obj)
        self.session.commit()
        self.session.refresh(session_obj)
        return session_obj

    # GET ALL
    def get_all(self):
        statement = select(SessionModel)
        return self.session.exec(statement).all()

    # GET ONE
    def get_one(self, session_id: int):
        return self.session.get(SessionModel, session_id)

    # UPDATE (used for ending session)
    def update(self, session_id: int, updated_session: SessionModel):
        session_obj = self.session.get(SessionModel, session_id)
        if session_obj:
            for key, value in updated_session.model_dump(exclude_unset=True).items():
                setattr(session_obj, key, value)
            self.session.add(session_obj)
            self.session.commit()
            self.session.refresh(session_obj)
        return session_obj
    
    # DELETE
    def delete(self, session_id: int):
        obj = self.session.get(SessionModel, session_id)
        if obj:
            self.session.delete(obj)
            self.session.commit()
        return obj
    
    def end_session(self, session_id: int):
        session_obj = self.session.get(SessionModel, session_id)
        if session_obj:
            session_obj.end_time = datetime.now()
            self.session.add(session_obj)
            self.session.commit()
            self.session.refresh(session_obj)
        return session_obj
    