# Generated by Django 3.2 on 2021-05-21 00:17

from django.db import migrations
import bookwyrm
from bookwyrm.connectors.abstract_connector import infer_physical_format


def infer_format(app_registry, schema_editor):
    """set the new physical format field based on existing format data"""
    db_alias = schema_editor.connection.alias

    editions = (
        app_registry.get_model("bookwyrm", "Edition")
        .objects.using(db_alias)
        .filter(physical_format_detail__isnull=False)
    )
    for edition in editions:
        free_format = edition.physical_format_detail.lower()
        edition.physical_format = infer_physical_format(free_format)
        edition.save()


def reverse(app_registry, schema_editor):
    """doesn't need to do anything"""


class Migration(migrations.Migration):

    dependencies = [
        ("bookwyrm", "0100_shelf_description"),
    ]

    operations = [
        migrations.RenameField(
            model_name="edition",
            old_name="physical_format",
            new_name="physical_format_detail",
        ),
        migrations.AddField(
            model_name="edition",
            name="physical_format",
            field=bookwyrm.models.fields.CharField(
                blank=True,
                choices=[
                    ("AudiobookFormat", "Audiobook"),
                    ("EBook", "eBook"),
                    ("GraphicNovel", "Graphic novel"),
                    ("Hardcover", "Hardcover"),
                    ("Paperback", "Paperback"),
                ],
                max_length=255,
                null=True,
            ),
        ),
        migrations.RunPython(infer_format, reverse),
    ]
