# Generated by Django 5.0.7 on 2026-07-19 05:45

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):
    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name="City",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("city_name", models.CharField(max_length=100, unique=True)),
            ],
            options={
                "db_table": "cities",
            },
        ),
        migrations.CreateModel(
            name="Operator",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("company_name", models.CharField(max_length=200)),
                ("registration_number", models.CharField(max_length=100, null=True)),
                ("document_encrypted", models.TextField(null=True)),
                ("verified", models.BooleanField(default=False)),
            ],
            options={
                "db_table": "operators",
            },
        ),
        migrations.CreateModel(
            name="Role",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("name", models.CharField(max_length=50, unique=True)),
            ],
            options={
                "db_table": "roles",
            },
        ),
        migrations.CreateModel(
            name="Bus",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("bus_name", models.CharField(max_length=150, null=True)),
                (
                    "registration_no",
                    models.CharField(max_length=100, null=True, unique=True),
                ),
                (
                    "bus_type",
                    models.CharField(
                        choices=[
                            ("NORMAL", "Normal"),
                            ("AC", "AC"),
                            ("DELUXE", "Deluxe"),
                            ("VIP", "VIP"),
                        ],
                        max_length=20,
                        null=True,
                    ),
                ),
                ("total_seats", models.IntegerField()),
                (
                    "status",
                    models.CharField(
                        choices=[("ACTIVE", "Active"), ("INACTIVE", "Inactive")],
                        default="ACTIVE",
                        max_length=20,
                    ),
                ),
                (
                    "operator",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.operator",
                    ),
                ),
            ],
            options={
                "db_table": "buses",
            },
        ),
        migrations.CreateModel(
            name="Route",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "distance_km",
                    models.DecimalField(decimal_places=2, max_digits=10, null=True),
                ),
                ("estimated_duration_minutes", models.IntegerField(null=True)),
                (
                    "destination_city",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="destination_routes",
                        to="testing_app.city",
                    ),
                ),
                (
                    "source_city",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="source_routes",
                        to="testing_app.city",
                    ),
                ),
            ],
            options={
                "db_table": "routes",
            },
        ),
        migrations.CreateModel(
            name="Schedule",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("departure_time", models.DateTimeField()),
                ("arrival_time", models.DateTimeField()),
                ("boarding_point_id", models.BigIntegerField(null=True)),
                ("dropping_point_id", models.BigIntegerField(null=True)),
                ("fare", models.DecimalField(decimal_places=2, max_digits=10)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("ACTIVE", "Active"),
                            ("CANCELLED", "Cancelled"),
                            ("COMPLETED", "Completed"),
                        ],
                        default="ACTIVE",
                        max_length=20,
                    ),
                ),
                (
                    "bus",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.bus",
                    ),
                ),
                (
                    "route",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.route",
                    ),
                ),
            ],
            options={
                "db_table": "schedules",
            },
        ),
        migrations.CreateModel(
            name="User",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("full_name", models.CharField(max_length=150)),
                ("email", models.CharField(max_length=150, unique=True)),
                ("phone", models.CharField(max_length=30, null=True, unique=True)),
                ("password_hash", models.CharField(max_length=255)),
                ("email_verified", models.BooleanField(default=False)),
                ("phone_verified", models.BooleanField(default=False)),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("ACTIVE", "Active"),
                            ("INACTIVE", "Inactive"),
                            ("SUSPENDED", "Suspended"),
                        ],
                        default="ACTIVE",
                        max_length=20,
                    ),
                ),
                ("failed_login_attempts", models.IntegerField(default=0)),
                ("account_locked_until", models.DateTimeField(blank=True, null=True)),
                ("password_changed_at", models.DateTimeField(blank=True, null=True)),
                ("last_login_at", models.DateTimeField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "role",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.role",
                    ),
                ),
            ],
            options={
                "db_table": "users",
            },
        ),
        migrations.AddField(
            model_name="operator",
            name="user",
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to="testing_app.user"
            ),
        ),
        migrations.CreateModel(
            name="Booking",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("booking_code", models.CharField(max_length=50, unique=True)),
                (
                    "total_amount",
                    models.DecimalField(decimal_places=2, max_digits=10, null=True),
                ),
                (
                    "booking_status",
                    models.CharField(
                        choices=[
                            ("PENDING", "Pending"),
                            ("CONFIRMED", "Confirmed"),
                            ("CANCELLED", "Cancelled"),
                            ("REFUNDED", "Refunded"),
                            ("CHECKED_IN", "Checked In"),
                            ("COMPLETED", "Completed"),
                        ],
                        default="PENDING",
                        max_length=20,
                    ),
                ),
                ("booked_at", models.DateTimeField(auto_now_add=True)),
                (
                    "schedule",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.schedule",
                    ),
                ),
                (
                    "user",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        to="testing_app.user",
                    ),
                ),
            ],
            options={
                "db_table": "bookings",
            },
        ),
    ]
