from __future__ import annotations

from django.db import migrations


TOURISM_IT_TO_EN = {
    "Culturale": "Cultural",
    "Balneare": "Beach",
    "Congressuale/Affari": "Conference/Business",
    "Fieristico": "Trade Fair",
    "Sportivo/Fitness": "Sport/Fitness",
    "Scolastico": "School",
    "Religioso": "Religious",
    "Sociale": "Social",
    "Parchi Tematici": "Theme Parks",
    "Termale/Trattamenti salute": "Spa/Health Treatments",
    "Enogastronomico": "Food and Wine",
    "Cicloturismo": "Cycle Tourism",
    "Escursionistico/Naturalistico": "Excursion/Nature",
    "Altro motivo": "Other reason",
    "Non Specificato": "Not Specified",
}

TRANSPORT_IT_TO_EN = {
    "Auto": "Car",
    "Aereo": "Plane",
    "Aereo+Pullman": "Plane + Bus",
    "Aereo+Navetta/Taxi/Auto": "Plane + Shuttle/Taxi/Car",
    "Aereo+Treno": "Plane + Train",
    "Treno": "Train",
    "Pullman": "Bus",
    "Caravan/Autocaravan": "Caravan",
    "Barca/Nave/Traghetto": "Boat",
    "Moto": "Motorcycle",
    "Bicicletta": "Bicycle",
    "A piedi": "Walking",
    "Altro mezzo": "Other",
    "Non Specificato": "Not Specified",
}


def _apply_translation(model, mapping: dict[str, str]):
    for it_name, en_name in mapping.items():
        if model.objects.filter(name=en_name).exists():
            model.objects.filter(name=it_name).exclude(name=en_name).delete()
        else:
            model.objects.filter(name=it_name).update(name=en_name)


def _reverse_translation(model, mapping: dict[str, str]):
    for it_name, en_name in mapping.items():
        if model.objects.filter(name=it_name).exists():
            model.objects.filter(name=en_name).exclude(name=it_name).delete()
        else:
            model.objects.filter(name=en_name).update(name=it_name)


def forwards(apps, schema_editor):
    IstatTourismType = apps.get_model("istat", "IstatTourismType")
    IstatTransportType = apps.get_model("istat", "IstatTransportType")
    _apply_translation(IstatTourismType, TOURISM_IT_TO_EN)
    _apply_translation(IstatTransportType, TRANSPORT_IT_TO_EN)


def backwards(apps, schema_editor):
    IstatTourismType = apps.get_model("istat", "IstatTourismType")
    IstatTransportType = apps.get_model("istat", "IstatTransportType")
    _reverse_translation(IstatTourismType, TOURISM_IT_TO_EN)
    _reverse_translation(IstatTransportType, TRANSPORT_IT_TO_EN)


class Migration(migrations.Migration):
    dependencies = [
        ("istat", "0002_seed_istat_reference_data"),
    ]

    operations = [
        migrations.RunPython(forwards, backwards),
    ]
