from django.core.management.base import BaseCommand
from django.utils import timezone
from django.db.models import Q

from datetime import datetime

from apps.employee.models import Activity, TimeSheet

import logging

logger = logging.getLogger(__name__)



class employee_clockout(BaseCommand):

        current_datetime = timezone.now()

        end_datetime = current_datetime.replace(hour=0, minute=0, second=0, microsecond=0) - timezone.timedelta(days=1)

        active_time_sheets = TimeSheet.objects.filter(clock_out_date_time__isnull=True, is_auto_clocked_out=False)

        for time_sheet in active_time_sheets:
            user = time_sheet.user
            projects = user.projects.all()

            activities_to_update = Activity.objects.filter(Q(user=user) | Q(project__in=projects),\
                end_date_time__isnull=True, is_auto_closed=False)

            activities_to_update.update(end_date_time=end_datetime, is_auto_closed=True)

            if not time_sheet.clock_out_date_time:
                time_sheet.clock_out_date_time = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
                time_sheet.is_auto_clocked_out = True
                time_sheet.save()

        current_datetime = datetime.now().strftime('{%Y-%m-%d %H:%M:%S}')

        logger.info(f"Message: {current_datetime} - System has closed activities successfully.")