# Generated by Django 4.2.7 on 2026-02-05 19:48

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


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ("products", "0009_product_available_from_alter_product_status"),
        ("payments", "0007_alter_mpesalinkingrequest_status"),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ("accounts", "0009_vendorprofile_total_menus_and_more"),
    ]

    operations = [
        migrations.CreateModel(
            name="Order",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "order_number",
                    models.CharField(editable=False, max_length=20, unique=True),
                ),
                (
                    "uuid",
                    models.UUIDField(default=uuid.uuid4, editable=False, unique=True),
                ),
                (
                    "status",
                    models.CharField(
                        choices=[
                            ("pending", "Pending"),
                            ("confirmed", "Confirmed"),
                            ("processing", "Processing"),
                            ("ready_for_pickup", "Ready for Pickup"),
                            ("dispatched", "Dispatched"),
                            ("out_for_delivery", "Out for Delivery"),
                            ("delivered", "Delivered"),
                            ("completed", "Completed"),
                            ("cancelled", "Cancelled"),
                            ("failed", "Failed"),
                            ("refunded", "Refunded"),
                            ("on_hold", "On Hold"),
                        ],
                        default="pending",
                        max_length=20,
                    ),
                ),
                (
                    "payment_method",
                    models.CharField(
                        choices=[
                            ("mpesa", "M-Pesa"),
                            ("cash", "Cash on Delivery"),
                            ("card", "Card Payment"),
                        ],
                        default="mpesa",
                        max_length=20,
                    ),
                ),
                (
                    "delivery_type",
                    models.CharField(
                        choices=[("pickup", "Pickup"), ("delivery", "Delivery")],
                        default="delivery",
                        max_length=20,
                    ),
                ),
                ("subtotal", models.DecimalField(decimal_places=2, max_digits=12)),
                (
                    "delivery_fee",
                    models.DecimalField(decimal_places=2, default=0, max_digits=10),
                ),
                ("total_amount", models.DecimalField(decimal_places=2, max_digits=12)),
                ("delivery_address", models.TextField(blank=True, null=True)),
                (
                    "delivery_phone",
                    models.CharField(blank=True, max_length=20, null=True),
                ),
                ("delivery_notes", models.TextField(blank=True, null=True)),
                (
                    "payment_reference",
                    models.CharField(blank=True, max_length=100, null=True),
                ),
                ("is_paid", models.BooleanField(default=False)),
                ("paid_at", models.DateTimeField(blank=True, null=True)),
                ("cancellation_reason", models.TextField(blank=True, null=True)),
                ("hold_reason", models.TextField(blank=True, null=True)),
                ("has_been_reviewed", models.BooleanField(default=False)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                ("confirmed_at", models.DateTimeField(blank=True, null=True)),
                ("delivered_at", models.DateTimeField(blank=True, null=True)),
                ("completed_at", models.DateTimeField(blank=True, null=True)),
                (
                    "customer",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="orders",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "mpesa_payment",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="orders",
                        to="payments.mpesapayment",
                    ),
                ),
                (
                    "vendor",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="orders_received",
                        to="accounts.vendorprofile",
                    ),
                ),
            ],
            options={
                "db_table": "orders",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="OrderStatusHistory",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("status", models.CharField(max_length=20)),
                ("notes", models.TextField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                (
                    "changed_by",
                    models.ForeignKey(
                        blank=True,
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "order",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="status_history",
                        to="orders.order",
                    ),
                ),
            ],
            options={
                "db_table": "order_status_history",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="OrderReview",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                (
                    "overall_rating",
                    models.IntegerField(
                        choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)]
                    ),
                ),
                (
                    "delivery_rating",
                    models.IntegerField(
                        blank=True,
                        choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)],
                        null=True,
                    ),
                ),
                (
                    "product_rating",
                    models.IntegerField(
                        blank=True,
                        choices=[(1, 1), (2, 2), (3, 3), (4, 4), (5, 5)],
                        null=True,
                    ),
                ),
                ("comment", models.TextField(blank=True, null=True)),
                ("vendor_response", models.TextField(blank=True, null=True)),
                ("vendor_responded_at", models.DateTimeField(blank=True, null=True)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                ("updated_at", models.DateTimeField(auto_now=True)),
                (
                    "customer",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="order_reviews",
                        to=settings.AUTH_USER_MODEL,
                    ),
                ),
                (
                    "order",
                    models.OneToOneField(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="review",
                        to="orders.order",
                    ),
                ),
                (
                    "vendor",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="order_reviews_received",
                        to="accounts.vendorprofile",
                    ),
                ),
            ],
            options={
                "db_table": "order_reviews",
                "ordering": ["-created_at"],
            },
        ),
        migrations.CreateModel(
            name="OrderItem",
            fields=[
                (
                    "id",
                    models.BigAutoField(
                        auto_created=True,
                        primary_key=True,
                        serialize=False,
                        verbose_name="ID",
                    ),
                ),
                ("product_name", models.CharField(max_length=200)),
                (
                    "product_image",
                    models.URLField(blank=True, max_length=500, null=True),
                ),
                ("quantity", models.PositiveIntegerField(default=1)),
                ("unit_price", models.DecimalField(decimal_places=2, max_digits=10)),
                ("total_price", models.DecimalField(decimal_places=2, max_digits=12)),
                ("has_been_reviewed", models.BooleanField(default=False)),
                ("created_at", models.DateTimeField(auto_now_add=True)),
                (
                    "order",
                    models.ForeignKey(
                        on_delete=django.db.models.deletion.CASCADE,
                        related_name="items",
                        to="orders.order",
                    ),
                ),
                (
                    "product",
                    models.ForeignKey(
                        null=True,
                        on_delete=django.db.models.deletion.SET_NULL,
                        related_name="order_items",
                        to="products.product",
                    ),
                ),
            ],
            options={
                "db_table": "order_items",
            },
        ),
        migrations.AddIndex(
            model_name="order",
            index=models.Index(
                fields=["customer", "status"], name="orders_custome_58f6c3_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="order",
            index=models.Index(
                fields=["vendor", "status"], name="orders_vendor__08c55e_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="order",
            index=models.Index(
                fields=["status", "created_at"], name="orders_status_11db6c_idx"
            ),
        ),
        migrations.AddIndex(
            model_name="order",
            index=models.Index(
                fields=["order_number"], name="orders_order_n_1336be_idx"
            ),
        ),
    ]
