# tasks.py
from celery import shared_task
from osinacore.models import *
from django.db.models import Q
from datetime import datetime, timedelta
import pytz

@shared_task
def set_offline():
    all_staff_profiles = StaffProfile.objects.all()
    for staff_profile in all_staff_profiles:
        last_point_activity = PointActivity.objects.filter(
            point__task__assigned_to=staff_profile
        ).last()
        if last_point_activity and last_point_activity.end_time:
            beirut_timezone = pytz.timezone('Asia/Beirut')
            current_time = datetime.now(beirut_timezone)
            if current_time - last_point_activity.end_time > timedelta(minutes=10):
                last_status = Status.objects.filter(staff=staff_profile).last()
                status_datetime = datetime.strptime(f"{last_status.date} {last_status.time}", '%Y-%m-%d %I:%M %p')
                status_datetime = beirut_timezone.localize(status_datetime)
                status_time_difference = current_time - status_datetime
                if status_time_difference > timedelta(minutes=10):
                    user = staff_profile.user
                    last_connection = Connection.objects.filter(user=user).order_by('-date').first()
                    if last_connection and last_connection.status != 'Offline':
                        if  current_time - last_connection.date > timedelta(minutes=5):
                            Connection.objects.create(
                                status='Offline',
                                date=datetime.now(),
                                user=user
                            )
                            Status.objects.create(
                                text='Went offline!',
                                date=datetime.now().date(),
                                time=datetime.now().strftime('%I:%M %p'),
                                staff=staff_profile
                            )