from django.db import transaction

from datetime import datetime

from core.utils.helper import filter_dict

from apps.employee.models import Activity, ActivityLatLong



@transaction.atomic
def start_activity(data):
    data['project'] = data['project_id']
    data['activity_type'] = data['activity_type_id']
    details = filter_dict(data, ['user', 'project', 'activity_type', 'start_date_time', 'end_date_time', 'description'])

    details['status'] = 'started'
    details['pay_per_hour'] = data['user'].pay_per_hour

    if 'end_date_time' in details and details['end_date_time']:
        details['status'] = 'completed'
        details['total_duration'] = details['end_date_time'] - details['start_date_time']

    activity = Activity.objects.create(**details)

    save_lat_longs('started', data['latitude'], data['longitude'], activity.id)
    if details['status'] == 'completed':
        save_lat_longs('completed', data['latitude'], data['longitude'], activity.id)

    return activity


@transaction.atomic
def complete_activity(id, data):
    details = filter_dict(data, ['end_date_time'])

    activity = Activity.objects.filter(id=id).select_related('user', 'activity_type','project').first()
    details['total_duration'] = details['end_date_time'] - activity.start_date_time

    Activity.objects.filter(id=id).update(**details, status='completed')

    if 'latitude' in data and 'longitude' in data and data['latitude'] and data['longitude']:
        save_lat_longs('completed', data['latitude'], data['longitude'], activity.id)


@transaction.atomic
def save_lat_longs(type, lat, long, activity_id):
    return ActivityLatLong.objects.create(type=type, activity_id=activity_id, lat=lat, long=long)