# Generated by Django 5.0.3 on 2024-04-27 07:00

import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("participation", "0013_alter_pool_options_pool_room"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="Channel",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("name", models.CharField(max_length=255, verbose_name="name")),
                (
                    "read_access",
                    models.CharField(
                        choices=[
                            ("anonymous", "Everyone, including anonymous users"),
                            ("authenticated", "Authenticated users"),
                            ("volunteer", "All volunteers"),
                            ("tournament", "All members of a given tournament"),
                            ("organizer", "Tournament organizers only"),
                            (
                                "jury_president",
                                "Tournament organizers and jury presidents of the tournament",
                            ),
                            ("jury", "Jury members of the pool"),
                            ("pool", "Jury members and participants of the pool"),
                            (
                                "team",
                                "Members of the team and organizers of concerned tournaments",
                            ),
                            (
                                "private",
                                "Private, reserved to explicit authorized users",
                            ),
                            ("admin", "Admin users"),
                        ],
                        max_length=16,
                        verbose_name="read permission",
                    ),
                ),
                (
                    "write_access",
                    models.CharField(
                        choices=[
                            ("anonymous", "Everyone, including anonymous users"),
                            ("authenticated", "Authenticated users"),
                            ("volunteer", "All volunteers"),
                            ("tournament", "All members of a given tournament"),
                            ("organizer", "Tournament organizers only"),
                            (
                                "jury_president",
                                "Tournament organizers and jury presidents of the tournament",
                            ),
                            ("jury", "Jury members of the pool"),
                            ("pool", "Jury members and participants of the pool"),
                            (
                                "team",
                                "Members of the team and organizers of concerned tournaments",
                            ),
                            (
                                "private",
                                "Private, reserved to explicit authorized users",
                            ),
                            ("admin", "Admin users"),
                        ],
                        max_length=16,
                        verbose_name="write permission",
                    ),
                ),
                (
                    "private",
                    models.BooleanField(
                        default=False,
                        help_text="If checked, only users who have been explicitly added to the channel will be able to access it.",
                        verbose_name="private",
                    ),
                ),
                (
                    "invited",
                    models.ManyToManyField(
                        blank=True,
                        help_text="Extra users who have been invited to the channel, in addition to the permitted group of the channel.",
                        related_name="+",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="invited users",
                    ),
                ),
                (
                    "pool",
                    models.ForeignKey(
                        blank=True,
                        default=None,
                        help_text="For a permission that concerns a pool, indicates what is the concerned pool.",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="chat_channels",
                        to="participation.pool",
                        verbose_name="pool",
                    ),
                ),
                (
                    "team",
                    models.ForeignKey(
                        blank=True,
                        default=None,
                        help_text="For a permission that concerns a team, indicates what is the concerned team.",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="chat_channels",
                        to="participation.team",
                        verbose_name="team",
                    ),
                ),
                (
                    "tournament",
                    models.ForeignKey(
                        blank=True,
                        default=None,
                        help_text="For a permission that concerns a tournament, indicates what is the concerned tournament.",
                        null=True,
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="chat_channels",
                        to="participation.tournament",
                        verbose_name="tournament",
                    ),
                ),
            ],
            options={
                "verbose_name": "channel",
                "verbose_name_plural": "channels",
                "ordering": ("name",),
            },
        ),
        migrations.CreateModel(
            name="Message",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "created_at",
                    models.DateTimeField(auto_now_add=True, verbose_name="created at"),
                ),
                (
                    "updated_at",
                    models.DateTimeField(auto_now=True, verbose_name="updated at"),
                ),
                ("content", models.TextField(verbose_name="content")),
                (
                    "author",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="chat_messages",
                        to=settings.AUTH_USER_MODEL,
                        verbose_name="author",
                    ),
                ),
                (
                    "channel",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="messages",
                        to="chat.channel",
                        verbose_name="channel",
                    ),
                ),
            ],
            options={
                "verbose_name": "message",
                "verbose_name_plural": "messages",
                "ordering": ("created_at",),
            },
        ),
    ]
