# Generated by Django 1.10.5 on 2017-02-02 05:59

from django.db import migrations
from django.conf import settings
from django.core.exceptions import ObjectDoesNotExist
from django.contrib.auth.management import create_permissions

import logging

logger = logging.getLogger(__name__)


def migrate_service_enabled(apps, schema_editor):
    for app_config in apps.get_app_configs():
        app_config.models_module = True
        create_permissions(app_config, apps=apps, verbosity=0)
        app_config.models_module = None

    Group = apps.get_model("auth", "Group")
    Permission = apps.get_model("auth", "Permission")
    Teamspeak3User = apps.get_model("teamspeak3", "Teamspeak3User")

    perm = Permission.objects.get(codename='access_teamspeak3')

    member_group_name = getattr(settings, 'DEFAULT_AUTH_GROUP', 'Member')
    blue_group_name = getattr(settings, 'DEFAULT_BLUE_GROUP', 'Blue')

    # Migrate members
    if Teamspeak3User.objects.filter(user__groups__name=member_group_name).exists() or \
            getattr(settings, 'ENABLE_AUTH_TEAMSPEAK3', False):
        try:
            group = Group.objects.get(name=member_group_name)
            group.permissions.add(perm)
        except ObjectDoesNotExist:
            logger.warning('Failed to migrate ENABLE_AUTH_TEAMSPEAK3 setting')

    # Migrate blues
    if Teamspeak3User.objects.filter(user__groups__name=blue_group_name).exists() or \
            getattr(settings, 'ENABLE_BLUE_TEAMSPEAK3', False):
        try:
            group = Group.objects.get(name=blue_group_name)
            group.permissions.add(perm)
        except ObjectDoesNotExist:
            logger.warning('Failed to migrate ENABLE_BLUE_TEAMSPEAK3 setting')


class Migration(migrations.Migration):

    dependencies = [
        ('teamspeak3', '0003_teamspeak3user'),
    ]

    operations = [
        migrations.AlterModelOptions(
            name='teamspeak3user',
            options={'permissions': (('access_teamspeak3', 'Can access the Teamspeak3 service'),)},
        ),
        migrations.RunPython(migrate_service_enabled, migrations.RunPython.noop),
    ]
