from django.utils import timezone  
from jsonschema import ValidationError
import pytz
from management.email.sending_email import SendingEmails
from management.models import *
from django.db import models as django_models
from management.serializer import *
from management.utils.error_handling import GenericError
from management.utils.filter_utils import parse_filters_and_sortings
from django.core.exceptions import ObjectDoesNotExist
from django.db import transaction
from datetime import datetime

class BaseRepository():
    entity:django_models.Model = None
    
    def get(self, id):
        try:
            return self.entity.objects.get(id=id)
        except ObjectDoesNotExist:
            return None
    
    def delete(self, id):
        model = self.get(id)
        if model:
            model.delete()
        else:
            raise GenericError({"code": "bad_request",
                         "description":
                         "Object not found"},400)
        
    def filtered(self, args: FilterAndSorting, user_id=None):
        query_set = self.entity.objects.all()
        return parse_filters_and_sortings(args, query_set, user_id)
    
    
def encode_special_chars(input_string):
    if input_string != None:
        return input_string.replace("'", "/").replace("&", "&amp;")
    return None