"""
Da alcances a las claves que ya estaban en circulacion.

`scopes` nace vacio y una lista vacia no autoriza nada, asi que sin este paso
todas las claves existentes dejarian de funcionar en el momento del despliegue.

Se les conceden los cuatro alcances, que es exactamente lo que podian hacer
antes: enviar por los tres canales y consultar envios. Es decir, este paso no
concede permisos nuevos a nadie; solo escribe lo que ya era cierto.

Restringir una clave concreta es una decision de operacion, no de migracion:
se hace despues con `manage.py create_api_key --scopes`, sabiendo que sistema
usa cada una.
"""

from django.db import migrations

ALCANCES_HEREDADOS = [
    "mail:send",
    "sms:send",
    "whatsapp:send",
    "messages:read",
]


def conceder(apps, schema_editor):
    ApiKeys = apps.get_model("keys", "ApiKeys")
    # Solo las que no tienen nada. Si esta migracion se reaplica sobre una
    # base donde ya se restringio alguna clave a mano, no se la revienta.
    actualizadas = ApiKeys.objects.filter(scopes=[]).update(scopes=ALCANCES_HEREDADOS)
    if actualizadas:
        print(f"  {actualizadas} clave(s) con los alcances heredados.")


def quitar(apps, schema_editor):
    ApiKeys = apps.get_model("keys", "ApiKeys")
    ApiKeys.objects.filter(scopes=ALCANCES_HEREDADOS).update(scopes=[])


class Migration(migrations.Migration):
    dependencies = [("keys", "0006_alcances_y_tokens")]

    operations = [migrations.RunPython(conceder, quitar)]
