from RIGS import models
import pytest
from django.utils import timezone


@pytest.fixture
def basic_event(db):
    event = models.Event.objects.create(name="TE E1", start_date=timezone.now())
    yield event
    event.delete()


@pytest.fixture
def ra(basic_event, admin_user):
    ra = models.RiskAssessment.objects.create(event=basic_event, nonstandard_equipment=False, nonstandard_use=False,
                                              contractors=False, other_companies=False, crew_fatigue=False,
                                              big_power=False, power_mic=admin_user, generators=False,
                                              other_companies_power=False, nonstandard_equipment_power=False,
                                              multiple_electrical_environments=False, noise_monitoring=False,
                                              known_venue=True, safe_loading=True, safe_storage=True,
                                              area_outside_of_control=True, barrier_required=True,
                                              nonstandard_emergency_procedure=True, special_structures=False,
                                              suspended_structures=False, outside=False)
    yield ra
    ra.delete()


@pytest.fixture
def medium_ra(ra):
    ra.big_power = True
    ra.save()
    yield ra
    ra.big_power = False
    ra.save()


@pytest.fixture
def venue(db):
    venue = models.Venue.objects.create(name="Venue 1")
    yield venue
    venue.delete()


@pytest.fixture  # TODO parameterise with Event sizes
def checklist(basic_event, venue, admin_user, ra):
    checklist = models.EventChecklist.objects.create(event=basic_event, safe_parking=False,
                                                     safe_packing=False, exits=False, trip_hazard=False, warning_signs=False,
                                                     ear_plugs=False, hs_location="Locked away safely",
                                                     extinguishers_location="Somewhere, I forgot",
                                                     date=timezone.now(), venue=venue)
    yield checklist
    checklist.delete()


@pytest.fixture
def power_test(basic_event, venue, admin_user, ra):
    power_test = models.PowerTestRecord.objects.create(event=basic_event, venue=venue)
    yield power_test
    power_test.delete()


@pytest.fixture
def many_events(db, admin_user, scope="class"):
    many_events = {
        # produce 7 normal events - 5 current
        1: models.Event.objects.create(name="TE E1", start_date=date.today() + timedelta(days=6),
                                       description="start future no end"),
        2: models.Event.objects.create(name="TE E2", start_date=date.today(), description="start today no end"),
        3: models.Event.objects.create(name="TE E3", start_date=date.today(), end_date=date.today(),
                                       description="start today with end today"),
        4: models.Event.objects.create(name="TE E4", start_date='2014-03-20', description="start past no end"),
        5: models.Event.objects.create(name="TE E5", start_date='2014-03-20', end_date='2014-03-21',
                                       description="start past with end past"),
        6: models.Event.objects.create(name="TE E6", start_date=date.today() - timedelta(days=2),
                                       end_date=date.today() + timedelta(days=2),
                                       description="start past, end future"),
        7: models.Event.objects.create(name="TE E7", start_date=date.today() + timedelta(days=2),
                                       end_date=date.today() + timedelta(days=2),
                                       description="start + end in future"),

        # 2 cancelled - 1 current
        8: models.Event.objects.create(name="TE E8", start_date=date.today() + timedelta(days=2),
                                       end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED,
                                       description="cancelled in future"),
        9: models.Event.objects.create(name="TE E9", start_date=date.today() - timedelta(days=1),
                                       end_date=date.today() + timedelta(days=2), status=models.Event.CANCELLED,
                                       description="cancelled and started"),

        # 5 dry hire - 3 current
        10: models.Event.objects.create(name="TE E10", start_date=date.today(), dry_hire=True,
                                        description="dryhire today"),
        11: models.Event.objects.create(name="TE E11", start_date=date.today(), dry_hire=True,
                                        checked_in_by=admin_user,
                                        description="dryhire today, checked in"),
        12: models.Event.objects.create(name="TE E12", start_date=date.today() - timedelta(days=1), dry_hire=True,
                                        status=models.Event.BOOKED, description="dryhire past"),
        13: models.Event.objects.create(name="TE E13", start_date=date.today() - timedelta(days=2), dry_hire=True,
                                        checked_in_by=admin_user, description="dryhire past checked in"),
        14: models.Event.objects.create(name="TE E14", start_date=date.today(), dry_hire=True,
                                        status=models.Event.CANCELLED, description="dryhire today cancelled"),

        # 4 non rig - 3 current
        15: models.Event.objects.create(name="TE E15", start_date=date.today(), is_rig=False,
                                        description="non rig today"),
        16: models.Event.objects.create(name="TE E16", start_date=date.today() + timedelta(days=1), is_rig=False,
                                        description="non rig tomorrow"),
        17: models.Event.objects.create(name="TE E17", start_date=date.today() - timedelta(days=1), is_rig=False,
                                        description="non rig yesterday"),
        18: models.Event.objects.create(name="TE E18", start_date=date.today(), is_rig=False,
                                        status=models.Event.CANCELLED,
                                        description="non rig today cancelled"),
    }
    yield many_events
    for event in many_events:
        event.delete()
