import datetime

from django.contrib.auth.models import User

from web.models import Location, AppointmentType, Subject, Worker, Visit, Appointment
from web.views import get_today_midnight_date


def create_location(name="test"):
    return Location.objects.create(name=name)


def get_test_location():
    locations = Location.objects.filter(name="test")
    if len(locations) > 0:
        return locations[0]
    else:
        return create_location()


def create_appointment_type():
    return AppointmentType.objects.create(
        code="C",
        default_duration="10",
        description="test",
    )


def create_subject():
    return Subject.objects.create(
        first_name="Piotr",
        last_name="Gawron",
        default_location=get_test_location(),
        sex=Subject.SEX_CHOICES_MALE)


def create_user():
    user = User.objects.create_user(
        username='piotr',
        email='jacob@bla',
        password='top_secret')

    create_worker(user)
    return user


def create_worker(user=None):
    return Worker.objects.create(
        first_name='piotr',
        last_name="gawron",
        email='jacob@bla',
        user=user,
    )


def create_visit(subject=None):
    if subject is None:
        subject = create_subject()
    return Visit.objects.create(datetime_begin=get_today_midnight_date() + datetime.timedelta(days=-31),
                                datetime_end=get_today_midnight_date() + datetime.timedelta(days=31),
                                subject=subject,
                                is_finished=False)


def create_appointment(visit=None):
    if visit is None:
        visit = create_visit()
    return Appointment.objects.create(
        visit=visit,
        length=30,
        location=get_test_location())