from datetime import datetime
import os
import json
from .models import *

def get_all_notification_subribescribers(org_id,key):
    permissions = UserPermissions.objects.filter(org_id=org_id,is_feature_active=True,is_org_comp_active=True,is_role_active=True,is_role_component_active=True,is_user_role_active=True,key='VIEW_ALL_NOTIFICATION').all()
    if permissions:
        for permission in permissions:
            user_obj = User.objects.filter(id=permission.user_id).first()
            user_notification_sub = NotificationSubscribers.objects.filter(type__key=key,user__id=permission.user_id).first()
            if not user_notification_sub:
                data = {"user":user_obj,"is_subscribed":True, "type":NotificationTypes.objects.get(key=key), "sub_added_by":user_obj, "sub_last_updated_by":user_obj}
                NotificationSubscribers.objects.create(**data)
                

def save_user_notification(notifiction_details):
        try:
            if notifiction_details["branch"]:
                if not isinstance(notifiction_details["branch"], OrganisationBranch):
                    notifiction_details["branch"] = OrganisationBranch.objects.get(pk=notifiction_details["branch"])
                
                notification = Notifications.objects.create(**{
                    "heading": notifiction_details["heading"],
                    "message": notifiction_details["message"],
                    "branch":notifiction_details["branch"],
                    "branch_name":notifiction_details["branch_name"],
                    "added_by":notifiction_details["added_by"],
                    "last_updated_by":notifiction_details["last_updated_by"]
                })

                if notification:
                    get_all_notification_subribescribers(notifiction_details["branch"].branch_organisation.id,notifiction_details["key"])
                    subscribers = NotificationSubscribers.objects.filter(type__key=notifiction_details["key"])
                    if subscribers:
                        for subscriber in subscribers:
                            is_add_notification = False
                            has_permission = UserPermissions.objects.filter(user_id=subscriber.user.id,is_feature_active=True,is_org_comp_active=True,is_role_active=True,is_role_component_active=True,is_user_role_active=True,key='VIEW_ALL_NOTIFICATION').all()
                            
                            if subscriber.user.user_organisation_branch.id == notifiction_details["branch"].id:
                                is_add_notification = True
                                 
                            if has_permission:
                                is_add_notification = True

                            if is_add_notification == True:
                                user_notifiction_details = {
                                    "notification": notification,
                                    "subscriber":subscriber,
                                }
                                UserNotifications.objects.create(**user_notifiction_details)
                            
        except Exception as e:
                print(e)
               



