from django.db import migrations
from django.forms import modelform_factory

from ccdb.utils.data import get_data_sources


class Migration(migrations.Migration):
    def migrate(apps, schema_editor):
        sources = get_data_sources()
        if not sources:
            return

        c = sources['db0']

        Species = apps.get_model('species', 'Species')

        Species.objects.all().delete()

        SpeciesForm = modelform_factory(Species, fields='__all__')

        for r in c.execute('SELECT * FROM tbl_lu_species;'):
            form = SpeciesForm(dict(common_name=r[1], genus=r[2],
                                    species=r[3], parasite=r[4],
                                    sort_order=int(r[5]) if r[5] else None))
            if form.is_valid():
                Species.objects.create(id=r[0], **form.cleaned_data)
            else:
                print('species', r[0:], form.errors.as_data())


    def rollback(apps, schema_editor):
        Species = apps.get_model('species', 'Species')
        Species.objects.all().delete()

    dependencies = [
        ('species', '0001_initial'),
        ('locations', '0002_DATA_initial'),
    ]

    operations = [
        migrations.RunPython(migrate, rollback),
    ]