# Generated by Django 5.2.15 on 2026-07-05 11: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 = [
        ('customers', '0001_initial'),
        ('tenancy', '0002_auditlog'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='InventoryDevice',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('asset_tag', models.CharField(max_length=100)),
                ('device_type', models.CharField(choices=[('ONU', 'ONU'), ('ONT', 'ONT'), ('ROUTER', 'Router'), ('MODEM', 'Modem'), ('ACCESS_POINT', 'Access Point'), ('SWITCH', 'Switch'), ('OTHER', 'Other')], max_length=30)),
                ('manufacturer', models.CharField(blank=True, max_length=150)),
                ('model_name', models.CharField(blank=True, max_length=150)),
                ('serial_number', models.CharField(blank=True, max_length=150)),
                ('mac_address', models.CharField(blank=True, max_length=50)),
                ('status', models.CharField(choices=[('AVAILABLE', 'Available'), ('ASSIGNED', 'Assigned'), ('FAULTY', 'Faulty'), ('IN_REPAIR', 'In Repair'), ('RETIRED', 'Retired')], default='AVAILABLE', max_length=30)),
                ('notes', models.TextField(blank=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_records', to='tenancy.organization')),
            ],
            options={
                'db_table': 'inventory_device',
                'ordering': ['asset_tag'],
            },
        ),
        migrations.CreateModel(
            name='DeviceAssignment',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('assigned_at', models.DateTimeField(auto_now_add=True)),
                ('returned_at', models.DateTimeField(blank=True, null=True)),
                ('return_condition', models.CharField(blank=True, choices=[('GOOD', 'Good'), ('DAMAGED', 'Damaged'), ('FAULTY', 'Faulty')], max_length=20)),
                ('assignment_notes', models.TextField(blank=True)),
                ('return_notes', models.TextField(blank=True)),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('assigned_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventory_device_assignments', to=settings.AUTH_USER_MODEL)),
                ('organization', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='%(app_label)s_%(class)s_records', to='tenancy.organization')),
                ('returned_by', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='inventory_device_returns', to=settings.AUTH_USER_MODEL)),
                ('service_account', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='device_assignments', to='customers.serviceaccount')),
                ('device', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, related_name='assignments', to='inventory.inventorydevice')),
            ],
            options={
                'db_table': 'inventory_device_assignment',
                'ordering': ['-assigned_at'],
            },
        ),
        migrations.AddIndex(
            model_name='inventorydevice',
            index=models.Index(fields=['organization', 'status'], name='device_org_status_idx'),
        ),
        migrations.AddIndex(
            model_name='inventorydevice',
            index=models.Index(fields=['organization', 'device_type'], name='device_org_type_idx'),
        ),
        migrations.AddConstraint(
            model_name='inventorydevice',
            constraint=models.UniqueConstraint(fields=('organization', 'asset_tag'), name='unique_device_asset_tag_per_org'),
        ),
        migrations.AddConstraint(
            model_name='inventorydevice',
            constraint=models.UniqueConstraint(condition=models.Q(('serial_number', ''), _negated=True), fields=('organization', 'serial_number'), name='unique_device_serial_per_org'),
        ),
        migrations.AddConstraint(
            model_name='inventorydevice',
            constraint=models.UniqueConstraint(condition=models.Q(('mac_address', ''), _negated=True), fields=('organization', 'mac_address'), name='unique_device_mac_per_org'),
        ),
        migrations.AddIndex(
            model_name='deviceassignment',
            index=models.Index(fields=['organization', 'service_account'], name='device_assign_org_service_idx'),
        ),
        migrations.AddIndex(
            model_name='deviceassignment',
            index=models.Index(fields=['organization', 'device'], name='device_assign_org_device_idx'),
        ),
        migrations.AddIndex(
            model_name='deviceassignment',
            index=models.Index(fields=['organization', 'returned_at'], name='device_assign_org_return_idx'),
        ),
        migrations.AddConstraint(
            model_name='deviceassignment',
            constraint=models.UniqueConstraint(condition=models.Q(('returned_at__isnull', True)), fields=('device',), name='unique_active_assignment_per_device'),
        ),
    ]
