from datetime import datetime

from core.config import get_db
from models.role import Role


class RoleService:

    def create(self, request):
        with get_db() as db:
            new_role = Role(label=request.label, has_attendance_management=request.has_attendance_management)
            db.add(new_role)
            db.commit()

    def list_all_roles(self):
        with get_db() as db:
            return db.query(Role).filter(Role.deleted_at.is_(None)).all()

    def get_by_id(self, role_id):
        with get_db() as db:
            return db.query(Role).get(role_id)

    def update_role(self, role_id, request):
        with get_db() as db:
            db.query(Role).filter(Role.id == role_id).update(
                {"label": request.label, "has_attendance_management": request.has_attendance_management})
            db.commit()

    def delete_role(self, role_id):
        with get_db() as db:
            db.query(Role).filter(Role.id == role_id).update({"deleted_at": datetime.now()})
            db.commit()
