# Generated by Django 5.2.13 on 2026-05-01 14:58

import django.db.models.deletion
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='Branch',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=160)),
                ('slug', models.SlugField(blank=True, max_length=180, unique=True)),
                ('type', models.CharField(default='Branch', max_length=80)),
                ('city', models.CharField(max_length=120)),
                ('district', models.CharField(max_length=120)),
                ('phone', models.CharField(max_length=30)),
                ('whatsapp', models.CharField(max_length=30)),
                ('opening_hours', models.CharField(blank=True, max_length=160)),
                ('map_link', models.URLField(blank=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['city'],
            },
        ),
        migrations.CreateModel(
            name='Brand',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=120)),
                ('slug', models.SlugField(blank=True, max_length=140, unique=True)),
                ('short_description', models.TextField(blank=True)),
                ('logo_text', models.CharField(blank=True, max_length=40)),
                ('key_strength', models.CharField(blank=True, max_length=180)),
                ('popular_models', models.JSONField(blank=True, default=list)),
                ('is_featured', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='Part',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=160)),
                ('category', models.CharField(max_length=120)),
                ('price', models.PositiveIntegerField(default=0)),
                ('image', models.ImageField(blank=True, upload_to='parts/')),
                ('compatibility', models.JSONField(blank=True, default=list)),
                ('inquiry_only', models.BooleanField(default=False)),
                ('stock_status', models.CharField(choices=[('IN_STOCK', 'In stock'), ('LIMITED_STOCK', 'Limited stock'), ('OUT_OF_STOCK', 'Out of stock'), ('TEST_RIDE_ONLY', 'Test ride only'), ('COMING_SOON', 'Coming soon')], default='IN_STOCK', max_length=40)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['category', 'name'],
            },
        ),
        migrations.CreateModel(
            name='Testimonial',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('customer_name', models.CharField(max_length=120)),
                ('location', models.CharField(max_length=120)),
                ('rating', models.PositiveSmallIntegerField(default=5)),
                ('comment', models.TextField()),
                ('scooter_name', models.CharField(blank=True, max_length=160)),
                ('image', models.ImageField(blank=True, upload_to='testimonials/')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
            ],
            options={
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Scooter',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=160)),
                ('slug', models.SlugField(blank=True, max_length=180, unique=True)),
                ('short_description', models.TextField()),
                ('long_description', models.TextField()),
                ('price', models.PositiveIntegerField(default=0)),
                ('offer_price', models.PositiveIntegerField(default=0)),
                ('range_km', models.PositiveIntegerField(default=0)),
                ('top_speed_kmph', models.PositiveIntegerField(default=0)),
                ('charging_time', models.CharField(max_length=80)),
                ('battery', models.CharField(max_length=120)),
                ('motor_power', models.CharField(max_length=120)),
                ('warranty', models.CharField(max_length=120)),
                ('colors', models.JSONField(blank=True, default=list)),
                ('hero_image', models.ImageField(blank=True, upload_to='scooters/hero/')),
                ('thumbnail_image', models.ImageField(blank=True, upload_to='scooters/thumbs/')),
                ('poster_image', models.ImageField(blank=True, upload_to='scooters/posters/')),
                ('ar_enabled', models.BooleanField(default=False)),
                ('is_featured', models.BooleanField(default=False)),
                ('published', models.BooleanField(default=True)),
                ('specs', models.JSONField(blank=True, default=list)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('brand', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='scooters', to='api.brand')),
            ],
            options={
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='Offer',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('category', models.CharField(max_length=120)),
                ('title', models.CharField(max_length=180)),
                ('description', models.TextField()),
                ('discount_label', models.CharField(max_length=80)),
                ('starts_at', models.DateField(blank=True, null=True)),
                ('valid_until', models.DateField()),
                ('active', models.BooleanField(default=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('branch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='offers', to='api.branch')),
                ('brand', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='offers', to='api.brand')),
                ('scooter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='offers', to='api.scooter')),
            ],
            options={
                'ordering': ['-valid_until'],
            },
        ),
        migrations.CreateModel(
            name='Lead',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('source', models.CharField(default='CONTACT_PAGE', max_length=80)),
                ('full_name', models.CharField(max_length=120)),
                ('phone', models.CharField(max_length=30)),
                ('email', models.EmailField(blank=True, max_length=254)),
                ('subject', models.CharField(blank=True, max_length=180)),
                ('message', models.TextField()),
                ('status', models.CharField(choices=[('NEW', 'New'), ('CONTACTED', 'Contacted'), ('QUALIFIED', 'Qualified'), ('CLOSED', 'Closed')], default='NEW', max_length=40)),
                ('notes', models.TextField(blank=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('branch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='leads', to='api.branch')),
                ('scooter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='leads', to='api.scooter')),
            ],
            options={
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='GalleryImage',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('category', models.CharField(max_length=80)),
                ('title', models.CharField(max_length=160)),
                ('image', models.ImageField(upload_to='gallery/')),
                ('alt', models.CharField(blank=True, max_length=180)),
                ('featured', models.BooleanField(default=False)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('branch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gallery_images', to='api.branch')),
                ('scooter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='gallery_images_public', to='api.scooter')),
            ],
            options={
                'ordering': ['-featured', '-created_at'],
            },
        ),
        migrations.CreateModel(
            name='ScooterAsset3D',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('glb_file', models.FileField(blank=True, upload_to='models/glb/')),
                ('usdz_file', models.FileField(blank=True, upload_to='models/usdz/')),
                ('poster_image', models.ImageField(blank=True, upload_to='models/posters/')),
                ('status', models.CharField(choices=[('PENDING', 'Pending'), ('UPLOADED', 'Uploaded'), ('NEEDS_OPTIMIZATION', 'Needs optimization'), ('OPTIMIZED', 'Optimized'), ('PUBLISHED', 'Published')], default='PENDING', max_length=40)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('scooter', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='asset_3d', to='api.scooter')),
            ],
        ),
        migrations.CreateModel(
            name='ScooterImage',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('image', models.ImageField(upload_to='scooters/gallery/')),
                ('alt', models.CharField(blank=True, max_length=180)),
                ('sort_order', models.PositiveIntegerField(default=0)),
                ('scooter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='gallery_images', to='api.scooter')),
            ],
            options={
                'ordering': ['sort_order', 'id'],
            },
        ),
        migrations.CreateModel(
            name='TestRideBooking',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('full_name', models.CharField(max_length=120)),
                ('phone', models.CharField(max_length=30)),
                ('email', models.EmailField(blank=True, max_length=254)),
                ('preferred_date', models.DateField(blank=True, null=True)),
                ('preferred_time', models.CharField(blank=True, max_length=40)),
                ('message', models.TextField(blank=True)),
                ('status', models.CharField(choices=[('PENDING', 'Pending'), ('CONFIRMED', 'Confirmed'), ('COMPLETED', 'Completed'), ('CANCELLED', 'Cancelled')], default='PENDING', max_length=40)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('branch', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bookings', to='api.branch')),
                ('scooter', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='bookings', to='api.scooter')),
            ],
            options={
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Inventory',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('status', models.CharField(choices=[('IN_STOCK', 'In stock'), ('LIMITED_STOCK', 'Limited stock'), ('OUT_OF_STOCK', 'Out of stock'), ('TEST_RIDE_ONLY', 'Test ride only'), ('COMING_SOON', 'Coming soon')], default='COMING_SOON', max_length=40)),
                ('quantity', models.PositiveIntegerField(default=0)),
                ('test_ride_available', models.BooleanField(default=False)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('branch', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inventory', to='api.branch')),
                ('scooter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='inventory', to='api.scooter')),
            ],
            options={
                'ordering': ['scooter__name', 'branch__city'],
                'constraints': [models.UniqueConstraint(fields=('scooter', 'branch'), name='unique_scooter_branch_inventory')],
            },
        ),
    ]
