# Generated by Django 5.1.4 on 2026-02-10 20:24

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


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("core", "0001_initial"),
        ("members", "0001_initial"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name="ClassCategory",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=100)),
                ("description", models.TextField(blank=True, default="")),
                (
                    "color_hex",
                    models.CharField(
                        default="#000000",
                        help_text="Hex colour code, e.g. #FF5733",
                        max_length=7,
                    ),
                ),
                ("icon", models.CharField(blank=True, default="", max_length=100)),
                ("is_active", models.BooleanField(default=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
            ],
            options={
                "verbose_name_plural": "class categories",
                "ordering": ["name"],
            },
        ),
        migrations.CreateModel(
            name="ClassSession",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("title", models.CharField(max_length=200)),
                ("description", models.TextField(blank=True, default="")),
                ("start_time", models.DateTimeField()),
                ("end_time", models.DateTimeField()),
                ("capacity", models.PositiveIntegerField(default=20)),
                ("enrolled_count", models.PositiveIntegerField(default=0)),
                ("waitlist_count", models.PositiveIntegerField(default=0)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("scheduled", "Scheduled"),
                            ("in_progress", "In Progress"),
                            ("completed", "Completed"),
                            ("cancelled", "Cancelled"),
                        ],
                        default="scheduled",
                        max_length=20,
                    ),
                ),
                ("is_recurring", models.BooleanField(default=False)),
                (
                    "recurrence_rule",
                    models.CharField(
                        blank=True,
                        help_text="RRULE string for recurring sessions",
                        max_length=255,
                        null=True,
                    ),
                ),
                ("cancel_reason", models.TextField(blank=True, default="")),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "instructor",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="instructed_sessions",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "location",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="class_sessions",
                        to="core.location",
                    ),
                ),
                (
                    "substitute_instructor",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="substitute_sessions",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
            ],
            options={
                "ordering": ["-start_time"],
            },
        ),
        migrations.CreateModel(
            name="ClassAttendanceLog",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("check_in_time", models.DateTimeField()),
                ("check_out_time", models.DateTimeField(blank=True, null=True)),
                (
                    "method",
                    models.CharField(
                        choices=[
                            ("manual", "Manual"),
                            ("qr", "QR Code"),
                            ("app", "App"),
                        ],
                        default="manual",
                        max_length=10,
                    ),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "member",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="class_attendance_logs",
                        to="members.memberprofile",
                    ),
                ),
                (
                    "class_session",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="attendance_logs",
                        to="scheduling.classsession",
                    ),
                ),
            ],
            options={
                "ordering": ["-check_in_time"],
            },
        ),
        migrations.CreateModel(
            name="ClassType",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=150)),
                ("description", models.TextField(blank=True, default="")),
                ("default_duration_minutes", models.PositiveIntegerField(default=60)),
                ("default_capacity", models.PositiveIntegerField(default=20)),
                (
                    "difficulty_level",
                    models.CharField(
                        choices=[
                            ("beginner", "Beginner"),
                            ("intermediate", "Intermediate"),
                            ("advanced", "Advanced"),
                            ("all_levels", "All Levels"),
                        ],
                        default="all_levels",
                        max_length=20,
                    ),
                ),
                (
                    "image",
                    models.ImageField(
                        blank=True, null=True, upload_to="scheduling/class_types/"
                    ),
                ),
                ("is_active", models.BooleanField(default=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "category",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="class_types",
                        to="scheduling.classcategory",
                    ),
                ),
            ],
            options={
                "ordering": ["name"],
            },
        ),
        migrations.AddField(
            model_name="classsession",
            name="class_type",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name="sessions",
                to="scheduling.classtype",
            ),
        ),
        migrations.CreateModel(
            name="Room",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("name", models.CharField(max_length=150)),
                ("capacity", models.PositiveIntegerField(default=0)),
                ("description", models.TextField(blank=True, default="")),
                ("amenities", models.JSONField(blank=True, default=list)),
                ("is_active", models.BooleanField(default=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "location",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="rooms",
                        to="core.location",
                    ),
                ),
            ],
            options={
                "ordering": ["name"],
            },
        ),
        migrations.CreateModel(
            name="RecurringClassTemplate",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "day_of_week",
                    models.IntegerField(help_text="Day of week: 0=Monday, 6=Sunday"),
                ),
                ("start_time", models.TimeField()),
                ("end_time", models.TimeField()),
                ("capacity", models.PositiveIntegerField(default=20)),
                ("is_active", models.BooleanField(default=True)),
                ("effective_from", models.DateField()),
                ("effective_until", models.DateField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "class_type",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="recurring_templates",
                        to="scheduling.classtype",
                    ),
                ),
                (
                    "instructor",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="recurring_templates",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "location",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="recurring_templates",
                        to="core.location",
                    ),
                ),
                (
                    "room",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="recurring_templates",
                        to="scheduling.room",
                    ),
                ),
            ],
            options={
                "ordering": ["day_of_week", "start_time"],
            },
        ),
        migrations.AddField(
            model_name="classsession",
            name="room",
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name="sessions",
                to="scheduling.room",
            ),
        ),
        migrations.CreateModel(
            name="VirtualClassSession",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "platform",
                    models.CharField(
                        choices=[
                            ("zoom", "Zoom"),
                            ("google_meet", "Google Meet"),
                            ("teams", "Microsoft Teams"),
                            ("custom", "Custom"),
                        ],
                        default="zoom",
                        max_length=20,
                    ),
                ),
                ("meeting_url", models.URLField(max_length=500)),
                (
                    "meeting_id",
                    models.CharField(blank=True, default="", max_length=100),
                ),
                (
                    "recording_url",
                    models.URLField(blank=True, max_length=500, null=True),
                ),
                ("is_live", models.BooleanField(default=False)),
                ("max_online_participants", models.PositiveIntegerField(default=100)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "class_session",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="virtual_session",
                        to="scheduling.classsession",
                    ),
                ),
            ],
            options={
                "verbose_name": "virtual class session",
                "verbose_name_plural": "virtual class sessions",
            },
        ),
        migrations.CreateModel(
            name="ClassBooking",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("booked", "Booked"),
                            ("waitlisted", "Waitlisted"),
                            ("attended", "Attended"),
                            ("no_show", "No Show"),
                            ("cancelled", "Cancelled"),
                        ],
                        default="booked",
                        max_length=20,
                    ),
                ),
                ("booked_at", models.DateTimeField(auto_now_add=True)),
                ("cancelled_at", models.DateTimeField(blank=True, null=True)),
                ("checked_in_at", models.DateTimeField(blank=True, null=True)),
                (
                    "waitlist_position",
                    models.PositiveIntegerField(blank=True, null=True),
                ),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "member",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="class_bookings",
                        to="members.memberprofile",
                    ),
                ),
                (
                    "class_session",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="bookings",
                        to="scheduling.classsession",
                    ),
                ),
            ],
            options={
                "ordering": ["-booked_at"],
                "unique_together": {("class_session", "member")},
            },
        ),
        migrations.CreateModel(
            name="WaitlistEntry",
            fields=[
                (
                    "id",
                    models.UUIDField(
                        default=uuid.uuid4,
                        editable=False,
                        primary_key=True,
                        serialize=False,
                    ),
                ),
                ("position", models.PositiveIntegerField()),
                ("joined_at", models.DateTimeField(auto_now_add=True)),
                ("notified", models.BooleanField(default=False)),
                ("notification_sent_at", models.DateTimeField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "class_session",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="waitlist_entries",
                        to="scheduling.classsession",
                    ),
                ),
                (
                    "member",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="waitlist_entries",
                        to="members.memberprofile",
                    ),
                ),
            ],
            options={
                "verbose_name_plural": "waitlist entries",
                "ordering": ["class_session", "position"],
                "unique_together": {("class_session", "member")},
            },
        ),
    ]
