# Generated by Django 3.2.18 on 2023-04-27 15:36

import agir.lib.validators
from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import django.utils.timezone
import dynamic_filenames
import stdimage.models
import uuid


class Migration(migrations.Migration):
    dependencies = [
        migrations.swappable_dependency(settings.NUNTIUS_SEGMENT_MODEL),
        ("activity", "0030_auto_20221016_0230"),
    ]

    operations = [
        migrations.CreateModel(
            name="PushAnnouncement",
            fields=[
                (
                    "created",
                    models.DateTimeField(
                        default=django.utils.timezone.now,
                        editable=False,
                        verbose_name="date de création",
                    ),
                ),
                (
                    "modified",
                    models.DateTimeField(
                        auto_now=True, verbose_name="dernière modification"
                    ),
                ),
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        help_text="UUID interne à l'API pour identifier la ressource",
                        primary_key=True,
                        serialize=False,
                        verbose_name="UUID",
                    ),
                ),
                (
                    "title",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Max. 50 caractères.",
                        max_length=50,
                        verbose_name="Titre",
                    ),
                ),
                (
                    "subtitle",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Max. 60 caractères. Le sous-titre s'affichera uniquement sur iOS.",
                        max_length=60,
                        verbose_name="Sous-titre",
                    ),
                ),
                (
                    "message",
                    models.TextField(
                        help_text="Longueur max. conséillée env. 150 caractères sur iOS et 240 sur Android.",
                        verbose_name="Message",
                    ),
                ),
                (
                    "link",
                    models.URLField(
                        help_text="Le lien à ouvrir lors du clic sur la notification.",
                        verbose_name="Lien",
                    ),
                ),
                (
                    "image",
                    stdimage.models.StdImageField(
                        blank=True,
                        force_min_size=False,
                        help_text="Utiliser une image avec un ratio de 2:1 et de maximum 5 MB.",
                        null=True,
                        upload_to=dynamic_filenames.FilePattern(
                            filename_pattern="activity/pushannouncements/image/{uuid:.2base32}/{uuid:s}{ext}"
                        ),
                        validators=[
                            agir.lib.validators.FileSizeValidator(5242880),
                            django.core.validators.FileExtensionValidator(
                                ["jpg", "jpeg", "png"]
                            ),
                        ],
                        variations={},
                        verbose_name="Image",
                    ),
                ),
                (
                    "thread_id",
                    models.CharField(
                        blank=True,
                        default="",
                        help_text="Max. 64 caractères. Si indiqué, permet de regrouper les notifications avec le même identifiant de groupe ensemble.",
                        max_length=64,
                        verbose_name="Idéntifiant de groupe",
                    ),
                ),
                (
                    "ttl",
                    models.IntegerField(
                        default=259200,
                        help_text="Max. 28 jours. La notification ne sera pas reçue si l'appareil n'est pas connecté au réseau pendant le temps indiqué.",
                        validators=[
                            django.core.validators.MinValueValidator(1),
                            django.core.validators.MaxValueValidator(2419200),
                        ],
                        verbose_name="Durée de vie (en secondes)",
                    ),
                ),
                (
                    "has_ios",
                    models.BooleanField(
                        default=True, verbose_name="Envoyer aux appareils iOS"
                    ),
                ),
                (
                    "has_android",
                    models.BooleanField(
                        default=True, verbose_name="Envoyer aux appareils Android"
                    ),
                ),
                (
                    "sending_meta",
                    models.JSONField(
                        blank=True,
                        default=dict,
                        editable=False,
                        verbose_name="Résultats de l'envoi",
                    ),
                ),
                (
                    "sending_date",
                    models.DateTimeField(
                        default=None,
                        editable=False,
                        null=True,
                        verbose_name="Date d'envoi",
                    ),
                ),
            ],
            options={
                "verbose_name": "Annonce push",
                "verbose_name_plural": "Annonces push",
                "ordering": ("-created",),
            },
        ),
        migrations.AlterField(
            model_name="activity",
            name="type",
            field=models.CharField(
                choices=[
                    ("waiting-payment", "Paiement en attente"),
                    (
                        "new-event-participation-mygroups",
                        "Le groupe participe à un événement",
                    ),
                    ("group-invitation", "Invitation à un groupe"),
                    ("new-follower", "Nouveau·lle abonné·e dans le groupe"),
                    ("new-member", "Nouveau membre dans le groupe"),
                    (
                        "member-status-changed",
                        "Un membre actif du groupe a été passé au statut abonné·e",
                    ),
                    (
                        "group-membership-limit-reminder",
                        "Les membres du groupes sont de plus en plus nombreux",
                    ),
                    ("new-message", "Nouveau message dans un de vos groupes"),
                    ("new-comment", "Nouveau commentaire dans un de vos groupes"),
                    (
                        "new-comment-restricted",
                        "Nouveau commentaire dans une de vos discussions",
                    ),
                    ("waiting-location-group", "Préciser la localisation du groupe"),
                    (
                        "waiting-location-event",
                        "Préciser la localisation d'un événement",
                    ),
                    ("new-event-speaker-request", "Nouvelle demande d'événement reçue"),
                    (
                        "group-coorganization-invite",
                        "Invitation à coorganiser un événement reçue",
                    ),
                    (
                        "group-coorganization-accepted",
                        "Invitation à coorganiser un événement acceptée",
                    ),
                    (
                        "group-coorganization-accepted-from",
                        "Invitation de leur groupe à coorganiser mon événement acceptée",
                    ),
                    (
                        "group-coorganization-accepted-to",
                        "Invitation de mon groupe à coorganiser leur événement acceptée",
                    ),
                    ("group-info-update", "Mise à jour des informations du groupe"),
                    (
                        "accepted-invitation-member",
                        "Invitation à rejoindre un groupe acceptée",
                    ),
                    ("new-attendee", "Un nouveau participant à votre événement"),
                    (
                        "new-group-attendee",
                        "Un nouveau groupe participant à votre événement",
                    ),
                    ("event-update", "Mise à jour d'un événement"),
                    ("new-event-mygroups", "Votre groupe organise un événement"),
                    ("new-report", "Nouveau compte-rendu d'événement"),
                    ("cancelled-event", "Événement annulé"),
                    ("referral-accepted", "Personne parrainée"),
                    ("announcement", "Associée à une annonce"),
                    (
                        "transferred-group-member",
                        "Un membre d'un groupe a été transferé vers un autre groupe",
                    ),
                    (
                        "new-members-through-transfer",
                        "De nouveaux membres ont été transferés vers le groupe",
                    ),
                    ("group-creation-confirmation", "Groupe créé"),
                    ("event-suggestion", "Événement suggéré"),
                    (
                        "reminder-docs-event-eve",
                        "Rappel à la veille d'un événement des documents à envoyer",
                    ),
                    (
                        "reminder-docs-event-nextday",
                        "Rappel au lendemain d'un événement des documents à envoyer",
                    ),
                    (
                        "reminder-report-form-for-event",
                        "Rappel au lendemain d'un événement de l'éventuel formulaire de bilan à remplir",
                    ),
                    (
                        "reminder-upcoming-event-start",
                        "Rappel du début imminent d'un événement pour les participants",
                    ),
                ],
                max_length=50,
                verbose_name="Type",
            ),
        ),
        migrations.AddField(
            model_name="pushannouncement",
            name="segment",
            field=models.ForeignKey(
                help_text="Segment des personnes auquel ce message sera envoyé.",
                on_delete=django.db.models.deletion.CASCADE,
                related_name="push_notifications",
                related_query_name="push_notification",
                to=settings.NUNTIUS_SEGMENT_MODEL,
                verbose_name="Segment",
            ),
        ),
        migrations.AddField(
            model_name="activity",
            name="push_announcement",
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                related_name="activities",
                related_query_name="activity",
                to="activity.pushannouncement",
            ),
        ),
        migrations.AddConstraint(
            model_name="activity",
            constraint=models.UniqueConstraint(
                condition=models.Q(("type", "push_announcement")),
                fields=("recipient", "push_announcement"),
                name="unique_for_recipient_and_push_announcement",
            ),
        ),
    ]
