import os


def setup():
    from authentication.models import ExtendedUser, EventPermission
    from inventory.models import Event
    from django.contrib.auth.models import Permission, Group
    permissions = ['add_item', 'view_item', 'view_file', 'delete_item', 'change_item']
    if not ExtendedUser.objects.filter(username='admin').exists():
        admin = ExtendedUser.objects.create_superuser('admin', 'admin@example.com', 'admin')
        admin.set_password('admin')
        admin.user_permissions.add(*Permission.objects.all())
        admin.save()

    if not ExtendedUser.objects.filter(username='testuser').exists():
        testuser = ExtendedUser.objects.create_user('testuser', 'testuser@example.com', 'testuser')
        testuser.set_password('testuser')
        testuser.user_permissions.add(*Permission.objects.all())
        testuser.save()

    team = Group.objects.get(name='Team')
    team.permissions.add(
        *Permission.objects.all()
    )

    if not ExtendedUser.objects.filter(username='testuser2').exists():
        testuser2 = ExtendedUser.objects.create_user('testuser2', 'testuser2@example.com', 'testuser2')
        testuser2.set_password('testuser2')
        testuser2.groups.add(team)
        testuser2.save()

    event1 = Event.objects.get_or_create(id=1, name='first test event', slug='TEST1',
                                         start='2023-12-18 00:00:00.000000', end='2023-12-27 00:00:00.000000',
                                         pre_start='2023-12-31 00:00:00.000000', post_end='2024-01-04 00:00:00.000000')[
        0]

    event2 = Event.objects.get_or_create(id=2, name='second test event', slug='TEST2',
                                         start='2024-12-18 00:00:00.000000', end='2024-12-27 00:00:00.000000',
                                         pre_start='2024-12-31 00:00:00.000000', post_end='2025-01-04 00:00:00.000000')[
        0]

    #    for permission in permissions:
    #        EventPermission.objects.create(event=event_37c3, user=foo,
    #                                       permission=Permission.objects.get(codename=permission))

    from tickets.models import IssueThread

    from mail.models import Email

    issue_thread = IssueThread.objects.get_or_create(
        id=1,
        name="test",
        event=Event.objects.get(slug='TEST1')
    )[0]
    mail1 = Email.objects.get_or_create(
        id=1,
        subject='test subject',
        body='test',
        sender='test1@test',
        recipient='test2@test',
        issue_thread=issue_thread,
    )[0]
    mail1_reply = Email.objects.get_or_create(
        id=2,
        subject='Message received',
        body='Thank you for your message.',
        sender='test2@test',
        recipient='test1@test',
        in_reply_to=mail1.reference,
        issue_thread=issue_thread,
    )[0]


def main():
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")
    import django

    django.setup()

    from django.core.management import call_command
    call_command('migrate')

    setup()
    print('testdata initialised')


if __name__ == '__main__':
    main()