from decimal import Decimal
import uuid
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='TelemetryAlert',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('alert_type', models.CharField(db_index=True, max_length=80)),
                ('severity', models.CharField(choices=[('INFO', 'Info'), ('WARNING', 'Warning'), ('CRITICAL', 'Critical')], default='WARNING', max_length=16)),
                ('status', models.CharField(choices=[('OPEN', 'Open'), ('RESOLVED', 'Resolved')], db_index=True, default='OPEN', max_length=16)),
                ('event_domain', models.CharField(choices=[('COMMERCE', 'Commerce'), ('NETWORK', 'Network'), ('OPERATIONAL', 'Operational')], db_index=True, default='OPERATIONAL', max_length=16)),
                ('detected_at', models.DateTimeField(db_index=True)),
                ('resolved_at', models.DateTimeField(blank=True, null=True)),
                ('metric_value', models.DecimalField(decimal_places=4, default=Decimal('0.0000'), max_digits=14)),
                ('threshold_value', models.DecimalField(decimal_places=4, default=Decimal('0.0000'), max_digits=14)),
                ('context', models.JSONField(blank=True, default=dict)),
            ],
        ),
        migrations.CreateModel(
            name='TelemetryCohortSnapshot',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('snapshot_date', models.DateField(db_index=True)),
                ('cohort_name', models.CharField(db_index=True, max_length=64)),
                ('users_count', models.PositiveIntegerField(default=0)),
                ('metrics', models.JSONField(blank=True, default=dict)),
            ],
        ),
        migrations.CreateModel(
            name='TelemetryEvent',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('event_type', models.CharField(db_index=True, max_length=64)),
                ('event_domain', models.CharField(choices=[('COMMERCE', 'Commerce'), ('NETWORK', 'Network'), ('OPERATIONAL', 'Operational')], db_index=True, max_length=16)),
                ('occurred_at', models.DateTimeField(db_index=True)),
                ('session_id', models.CharField(blank=True, db_index=True, default='', max_length=128)),
                ('device', models.CharField(blank=True, default='', max_length=64)),
                ('page', models.CharField(blank=True, default='', max_length=255)),
                ('source', models.CharField(default='frontend', max_length=32)),
                ('metadata', models.JSONField(blank=True, default=dict)),
                ('client_event_id', models.CharField(blank=True, db_index=True, default='', max_length=128)),
                ('retention_expires_at', models.DateTimeField(blank=True, db_index=True, null=True)),
                ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='telemetry_events', to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='TelemetryFunnelSnapshot',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('snapshot_date', models.DateField(db_index=True)),
                ('funnel_name', models.CharField(db_index=True, max_length=64)),
                ('stage_name', models.CharField(db_index=True, max_length=64)),
                ('stage_order', models.PositiveSmallIntegerField(default=0)),
                ('event_domain', models.CharField(choices=[('COMMERCE', 'Commerce'), ('NETWORK', 'Network'), ('OPERATIONAL', 'Operational')], db_index=True, max_length=16)),
                ('users_count', models.PositiveIntegerField(default=0)),
                ('conversion_rate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=6)),
            ],
        ),
        migrations.CreateModel(
            name='TelemetryKPIAggregate',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('period_type', models.CharField(choices=[('DAY', 'Daily'), ('WEEK', 'Weekly'), ('MONTH', 'Monthly')], db_index=True, max_length=8)),
                ('period_start', models.DateField(db_index=True)),
                ('period_end', models.DateField(db_index=True)),
                ('event_domain', models.CharField(choices=[('COMMERCE', 'Commerce'), ('NETWORK', 'Network'), ('OPERATIONAL', 'Operational')], db_index=True, max_length=16)),
                ('metrics', models.JSONField(blank=True, default=dict)),
            ],
        ),
        migrations.CreateModel(
            name='TelemetryRetentionSnapshot',
            fields=[
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False)),
                ('created_at', models.DateTimeField(auto_now_add=True, db_index=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('is_active', models.BooleanField(db_index=True, default=True)),
                ('cohort_date', models.DateField(db_index=True)),
                ('retention_day', models.PositiveSmallIntegerField(db_index=True)),
                ('event_domain', models.CharField(choices=[('COMMERCE', 'Commerce'), ('NETWORK', 'Network'), ('OPERATIONAL', 'Operational')], db_index=True, default='COMMERCE', max_length=16)),
                ('cohort_size', models.PositiveIntegerField(default=0)),
                ('active_users', models.PositiveIntegerField(default=0)),
                ('retention_rate', models.DecimalField(decimal_places=2, default=Decimal('0.00'), max_digits=6)),
            ],
        ),
        migrations.AddConstraint(
            model_name='telemetrycohortsnapshot',
            constraint=models.UniqueConstraint(fields=('snapshot_date', 'cohort_name'), name='uniq_telemetry_cohort_snapshot'),
        ),
        migrations.AddConstraint(
            model_name='telemetryfunnelsnapshot',
            constraint=models.UniqueConstraint(fields=('snapshot_date', 'funnel_name', 'stage_order', 'event_domain'), name='uniq_telemetry_funnel_snapshot'),
        ),
        migrations.AddConstraint(
            model_name='telemetrykpiaggregate',
            constraint=models.UniqueConstraint(fields=('period_type', 'period_start', 'event_domain'), name='uniq_telemetry_kpi_period_domain'),
        ),
        migrations.AddConstraint(
            model_name='telemetryretentionsnapshot',
            constraint=models.UniqueConstraint(fields=('cohort_date', 'retention_day', 'event_domain'), name='uniq_telemetry_retention_snapshot'),
        ),
        migrations.AddIndex(
            model_name='telemetryevent',
            index=models.Index(fields=['event_type', 'occurred_at'], name='telemetry_e_event_t_779530_idx'),
        ),
        migrations.AddIndex(
            model_name='telemetryevent',
            index=models.Index(fields=['event_domain', 'occurred_at'], name='telemetry_e_event_d_3bb180_idx'),
        ),
        migrations.AddIndex(
            model_name='telemetryevent',
            index=models.Index(fields=['user', 'occurred_at'], name='telemetry_e_user_id_65b92c_idx'),
        ),
        migrations.AddIndex(
            model_name='telemetryevent',
            index=models.Index(fields=['session_id', 'occurred_at'], name='telemetry_e_session_31207f_idx'),
        ),
        migrations.AddIndex(
            model_name='telemetryalert',
            index=models.Index(fields=['status', 'detected_at'], name='telemetry_a_status_5c4eb8_idx'),
        ),
        migrations.AddIndex(
            model_name='telemetryalert',
            index=models.Index(fields=['alert_type', 'status'], name='telemetry_a_alert_t_053016_idx'),
        ),
    ]
