# -*- coding: utf-8 -*-
# Generated by Django 1.11.3 on 2017-07-14 16:41
from __future__ import unicode_literals

from datetime import time

import django.db.models.deletion
from django.db import migrations, models


def migrate_foodtype_stores_forward(apps, schema_editor):
    FoodType = apps.get_model('lunch.FoodType')
    Store = apps.get_model('lunch.Store')
    Food = apps.get_model('lunch.Food')
    IngredientGroup = apps.get_model('lunch.IngredientGroup')
    Quantity = apps.get_model('lunch.Quantity')

    stores = Store.objects.all()

    for foodtype in FoodType.objects.all():
        old_foodtype = FoodType.objects.get(
            pk=foodtype.pk
        )

        for store in stores:
            foodtype.pk = None
            foodtype.store = store
            foodtype.preorder_time = store.preorder_time

            foodtype.save()

            Food.objects.filter(
                menu__store=store,
                foodtype=old_foodtype
            ).update(
                foodtype=foodtype
            )
            IngredientGroup.objects.filter(
                store=store,
                foodtype=old_foodtype
            ).update(
                foodtype=foodtype
            )
            Quantity.objects.filter(
                store=store,
                foodtype=old_foodtype
            ).update(
                foodtype=foodtype
            )

    FoodType.objects.filter(
        store_id=None
    ).delete()


def migrate_foodtype_stores_backwards(apps, schema_editor):
    pass


def migrate_store_preorder_forward(apps, schema_editor):
    Store = apps.get_model('lunch.Store')
    Food = apps.get_model('lunch.Food')

    stores = Store.objects.all()

    for store in stores:
        for food in Food.objects.filter(
            menu__store=store
        ):
            if food.preorder_days == 0:
                food.preorder_days = None
            food.save()



def migrate_store_preorder_backwards(apps, schema_editor):
    pass


class Migration(migrations.Migration):

    dependencies = [
        ('lunch', '0001_initial'),
    ]

    operations = [
        migrations.RunSQL('SET CONSTRAINTS ALL IMMEDIATE',
                          reverse_sql=migrations.RunSQL.noop),
        migrations.RemoveField(
            model_name='foodtype',
            name='customisable',
        ),
        migrations.AddField(
            model_name='food',
            name='preorder_disabled',
            field=models.BooleanField(default=False, help_text='Of de mogelijkheid om op voorhand te bestellen specifiek voor dit etenswaar is uitgeschakeld.',
                                      verbose_name='voorhand bestelling uitschakelen'),
        ),
        migrations.AddField(
            model_name='food',
            name='preorder_time',
            field=models.TimeField(blank=True, default=None, help_text='Indien bepaalde waren meer dan een dag op voorhand besteld moeten worden, moeten ze voor dit tijdstip besteld worden. Dit leeg laten betekent dat deze instelling overgenomen wordt van het type etenswaar.',
                                   null=True, verbose_name='tijd voorafgaande bestelling'),
        ),
        migrations.AddField(
            model_name='food',
            name='wait',
            field=models.DurationField(
                blank=True, default=None, help_text='Minimum tijd dat op voorhand besteld moet worden. Dit leeg laten betekent dat deze instelling overgenomen wordt van het type etenswaar.', null=True, verbose_name='wachttijd'),
        ),
        migrations.AddField(
            model_name='foodtype',
            name='preorder_days',
            field=models.IntegerField(blank=True, default=None, help_text='Minimum dagen op voorhand bestellen voor het uur ingesteld op de winkel. (0 is dezelfde dag, >=1 is dat aantal dagen voor het bepaalde uur.) Indien dit niet ingesteld is, dan is voorbestellen uitgeschakeld voor dit type etenswaar.', null=True, verbose_name='dagen op voorhand bestellen'),
        ),
        migrations.AddField(
            model_name='foodtype',
            name='store',
            field=models.ForeignKey(help_text='Winkel.', null=True,
                                    on_delete=django.db.models.deletion.CASCADE, to='lunch.Store', verbose_name='winkel'),
        ),
        migrations.AddField(
            model_name='foodtype',
            name='preorder_time',
            field=models.TimeField(default=time(hour=12), help_text='Indien bepaalde waren meer dan een dag op voorhand besteld moeten worden, moeten ze voor dit tijdstip besteld worden.',
                                   verbose_name='tijd voorafgaande bestelling'),
        ),
        migrations.AddField(
            model_name='foodtype',
            name='wait',
            field=models.DurationField(
                blank=True, default=None, help_text='Minimum tijd dat op voorhand besteld moet worden. Indien dit niet ingesteld is, dan wordt de wachttijd van de winkel overgenomen.', null=True, verbose_name='wachttijd'),
        ),
        migrations.AlterField(
            model_name='food',
            name='preorder_days',
            field=models.IntegerField(blank=True, default=None, help_text='Minimum dagen op voorhand bestellen voor het uur ingesteld op de winkel. (0 is dezelfde dag, >=1 is dat aantal dagen voor het bepaalde uur.) Dit leeg laten betekent dat deze instelling overgenomen wordt van het type etenswaar.', null=True, verbose_name='dagen op voorhand bestellen'),
        ),
        migrations.RunPython(
            migrate_store_preorder_forward,
            migrate_store_preorder_backwards
        ),
        migrations.RunPython(
            migrate_foodtype_stores_forward,
            migrate_foodtype_stores_backwards
        ),
        migrations.RemoveField(
            model_name='store',
            name='preorder_time',
        ),
        migrations.AlterField(
            model_name='foodtype',
            name='store',
            field=models.ForeignKey(
                help_text='Winkel.', on_delete=django.db.models.deletion.CASCADE, to='lunch.Store', verbose_name='winkel'),
        ),
        migrations.RunSQL(migrations.RunSQL.noop,
                          reverse_sql='SET CONSTRAINTS ALL IMMEDIATE'),
    ]
