# Generated by Django 4.2.13 on 2025-08-12 10:30

import apps.campaigns.utils
from decimal import Decimal
from django.conf import settings
import django.core.validators
from django.db import migrations, models
import django.db.models.deletion
import uuid


class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('agencies', '0001_initial'),
        ('channels', '0001_initial'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Adspots',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Timestamp when this object was created', verbose_name='Created At')),
                ('updated_at', models.DateTimeField(auto_now=True, help_text='Timestamp when this object was last modified', verbose_name='Updated At')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for this object', primary_key=True, serialize=False)),
                ('is_deleted', models.BooleanField(default=False, help_text='Whether this object has been soft-deleted', verbose_name='Is Deleted')),
                ('deleted_at', models.DateTimeField(blank=True, help_text='Timestamp when this object was soft-deleted', null=True, verbose_name='Deleted At')),
                ('name', models.CharField(blank=True, help_text='Name/title of the ad spot', max_length=255, null=True)),
                ('original_file', models.FileField(blank=True, help_text='Original uploaded ad file', null=True, upload_to=apps.campaigns.utils.get_original_file_upload_path)),
                ('encoded_file', models.FileField(blank=True, help_text='Processed/encoded ad file', null=True, upload_to=apps.campaigns.utils.get_encoded_file_upload_path)),
                ('duration', models.PositiveIntegerField(blank=True, help_text='Duration in seconds', null=True, validators=[django.core.validators.MinValueValidator(1)])),
                ('status', models.CharField(choices=[('draft', 'Draft'), ('processing', 'Processing'), ('ready', 'Ready'), ('active', 'Active'), ('paused', 'Paused'), ('completed', 'Completed'), ('failed', 'Failed'), ('archived', 'Archived')], default='draft', help_text='Current status of the ad spot', max_length=20)),
                ('url_from_vast', models.URLField(blank=True, help_text='VAST tag URL for the ad', null=True)),
                ('file_size', models.PositiveBigIntegerField(blank=True, help_text='File size in bytes', null=True)),
                ('mime_type', models.CharField(blank=True, help_text='MIME type of the ad file', max_length=100, null=True)),
                ('is_active', models.BooleanField(default=True, help_text='Whether this ad spot is active')),
                ('brand', models.ForeignKey(blank=True, help_text='Associated brand', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adspots', to='agencies.brand')),
            ],
            options={
                'verbose_name': 'Ad Spot',
                'verbose_name_plural': 'Ad Spots',
                'db_table': 'Adspots',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='Campaigns',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Timestamp when this object was created', verbose_name='Created At')),
                ('updated_at', models.DateTimeField(auto_now=True, help_text='Timestamp when this object was last modified', verbose_name='Updated At')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for this object', primary_key=True, serialize=False)),
                ('is_deleted', models.BooleanField(default=False, help_text='Whether this object has been soft-deleted', verbose_name='Is Deleted')),
                ('deleted_at', models.DateTimeField(blank=True, help_text='Timestamp when this object was soft-deleted', null=True, verbose_name='Deleted At')),
                ('name', models.CharField(max_length=255)),
                ('status', models.CharField(choices=[('Draft', 'Draft'), ('Pending Approval', 'Pending Approval'), ('Approved', 'Approved'), ('Scheduled', 'Scheduled'), ('Prebooked', 'Prebooked'), ('Booked', 'Booked'), ('Canceled', 'Canceled'), ('In progress', 'In Progress'), ('Terminated', 'Terminated'), ('Active', 'Active'), ('Paused', 'Paused'), ('Completed', 'Completed'), ('Cancelled', 'Cancelled')], default='Draft', max_length=20)),
                ('pacing', models.BooleanField(blank=True, null=True)),
                ('start_date', models.DateTimeField()),
                ('end_date', models.DateTimeField()),
                ('timezone', models.CharField(default='UTC', max_length=50)),
                ('budget', models.DecimalField(decimal_places=2, max_digits=12, validators=[django.core.validators.MinValueValidator(Decimal('0.01'))])),
                ('volume', models.IntegerField(blank=True, null=True)),
                ('delivery', models.IntegerField(blank=True, null=True)),
                ('cpm', models.FloatField(blank=True, null=True)),
                ('general_rotation', models.IntegerField()),
                ('product', models.CharField(max_length=255, null=True)),
                ('category', models.CharField(max_length=255, null=True)),
                ('country', models.CharField(max_length=255, null=True)),
                ('broadcasts_day', models.IntegerField(blank=True, null=True)),
                ('media_type', models.CharField(max_length=255, null=True)),
                ('is_vast', models.BooleanField(blank=True, null=True)),
                ('vast_data', models.CharField(max_length=255, null=True)),
                ('exclusivity', models.BooleanField(default=False)),
                ('program_category', models.CharField(blank=True, max_length=255, null=True)),
                ('shows_preference', models.CharField(blank=True, max_length=255, null=True)),
                ('position_preference', models.CharField(blank=True, max_length=255, null=True)),
                ('adpost', models.ForeignKey(blank=True, db_column='id_adpost', null=True, on_delete=django.db.models.deletion.SET_NULL, to='campaigns.adspots')),
                ('advertiser', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='campaigns', to='agencies.advertiser')),
                ('agency', models.ForeignKey(blank=True, db_column='agency', null=True, on_delete=django.db.models.deletion.SET_NULL, to='agencies.agency')),
                ('brand', models.ForeignKey(blank=True, db_column='brand', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='campaigns', to='agencies.brand')),
                ('campaign_manager', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='managed_campaigns', to=settings.AUTH_USER_MODEL)),
                ('created_by', models.ForeignKey(blank=True, help_text='User who created this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('deleted_by', models.ForeignKey(blank=True, help_text='User who soft-deleted this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_deleted', to=settings.AUTH_USER_MODEL, verbose_name='Deleted By')),
                ('updated_by', models.ForeignKey(blank=True, help_text='User who last modified this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated', to=settings.AUTH_USER_MODEL, verbose_name='Updated By')),
            ],
            options={
                'verbose_name': 'Campaign',
                'verbose_name_plural': 'Campaigns',
                'db_table': 'Campaigns',
                'ordering': ['-created_at'],
            },
        ),
        migrations.CreateModel(
            name='DayTime',
            fields=[
                ('id_time', models.AutoField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=255)),
                ('start', models.CharField(max_length=255)),
                ('end', models.CharField(max_length=255)),
            ],
            options={
                'db_table': 'Day_time',
            },
        ),
        migrations.CreateModel(
            name='Pending',
            fields=[
                ('id_pending', models.AutoField(primary_key=True, serialize=False)),
                ('creative_id', models.CharField(max_length=255)),
                ('url', models.CharField(max_length=255)),
                ('duration', models.CharField(max_length=255)),
            ],
            options={
                'db_table': 'Pending',
            },
        ),
        migrations.CreateModel(
            name='Placement',
            fields=[
                ('id_placement', models.AutoField(primary_key=True, serialize=False)),
                ('id_campaign', models.ForeignKey(blank=True, db_column='id_campaign', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='campaigns.campaigns')),
                ('id_channel', models.ForeignKey(blank=True, db_column='id_channel', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='channels.channel')),
                ('id_time', models.ForeignKey(blank=True, db_column='id_time', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='campaigns.daytime')),
            ],
            options={
                'db_table': 'Placement',
            },
        ),
        migrations.CreateModel(
            name='CampaignTimeIntervals',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Timestamp when this object was created', verbose_name='Created At')),
                ('updated_at', models.DateTimeField(auto_now=True, help_text='Timestamp when this object was last modified', verbose_name='Updated At')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for this object', primary_key=True, serialize=False)),
                ('is_deleted', models.BooleanField(default=False, help_text='Whether this object has been soft-deleted', verbose_name='Is Deleted')),
                ('deleted_at', models.DateTimeField(blank=True, help_text='Timestamp when this object was soft-deleted', null=True, verbose_name='Deleted At')),
                ('start_time', models.TimeField(help_text='Start time for ad spot availability', verbose_name='Start Time')),
                ('end_time', models.TimeField(help_text='End time for ad spot availability', verbose_name='End Time')),
                ('campaign', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='campaigns.campaigns', verbose_name='Campaign')),
                ('created_by', models.ForeignKey(blank=True, help_text='User who created this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('deleted_by', models.ForeignKey(blank=True, help_text='User who soft-deleted this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_deleted', to=settings.AUTH_USER_MODEL, verbose_name='Deleted By')),
                ('updated_by', models.ForeignKey(blank=True, help_text='User who last modified this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated', to=settings.AUTH_USER_MODEL, verbose_name='Updated By')),
            ],
            options={
                'db_table': 'CampaignTimeIntervals',
            },
        ),
        migrations.CreateModel(
            name='CampaignPriorityScores',
            fields=[
                ('id', models.AutoField(db_column='id', primary_key=True, serialize=False)),
                ('priority_score', models.FloatField(blank=True, help_text='The priority score calculated for the campaign on the given date.', null=True)),
                ('created_at', models.DateTimeField(auto_now_add=True, help_text='The date and time when the priority score record was created.')),
                ('updated_at', models.DateTimeField(auto_now=True, help_text='The date and time when the priority score record was last updated.')),
                ('campaign', models.ForeignKey(blank=True, help_text='The foreign key referencing the associated Campaign.', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='campaigns.campaigns')),
            ],
            options={
                'db_table': 'CampaignPriorityScores',
            },
        ),
        migrations.CreateModel(
            name='Campaignairtimelog',
            fields=[
                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Timestamp when this object was created', verbose_name='Created At')),
                ('updated_at', models.DateTimeField(auto_now=True, help_text='Timestamp when this object was last modified', verbose_name='Updated At')),
                ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='Unique identifier for this object', primary_key=True, serialize=False)),
                ('is_deleted', models.BooleanField(default=False, help_text='Whether this object has been soft-deleted', verbose_name='Is Deleted')),
                ('deleted_at', models.DateTimeField(blank=True, help_text='Timestamp when this object was soft-deleted', null=True, verbose_name='Deleted At')),
                ('airtime_start', models.DateTimeField(blank=True, null=True)),
                ('airtime_end', models.DateTimeField(blank=True, null=True)),
                ('insertion_status', models.BooleanField(blank=True, null=True)),
                ('ad_break', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='channels.adbreak')),
                ('campaign', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='campaigns.campaigns')),
                ('created_by', models.ForeignKey(blank=True, help_text='User who created this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL, verbose_name='Created By')),
                ('deleted_by', models.ForeignKey(blank=True, help_text='User who soft-deleted this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_deleted', to=settings.AUTH_USER_MODEL, verbose_name='Deleted By')),
                ('spot', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='campaigns.adspots')),
                ('updated_by', models.ForeignKey(blank=True, help_text='User who last modified this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated', to=settings.AUTH_USER_MODEL, verbose_name='Updated By')),
            ],
            options={
                'db_table': 'CampaignAirtimeLog',
            },
        ),
        migrations.AddField(
            model_name='adspots',
            name='campaign',
            field=models.ForeignKey(blank=True, help_text='Associated campaign', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adspots', to='campaigns.campaigns'),
        ),
        migrations.AddField(
            model_name='adspots',
            name='channel',
            field=models.ForeignKey(blank=True, help_text='Distribution channel', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='adspots', to='channels.channel'),
        ),
        migrations.AddField(
            model_name='adspots',
            name='created_by',
            field=models.ForeignKey(blank=True, help_text='User who created this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_created', to=settings.AUTH_USER_MODEL, verbose_name='Created By'),
        ),
        migrations.AddField(
            model_name='adspots',
            name='deleted_by',
            field=models.ForeignKey(blank=True, help_text='User who soft-deleted this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_deleted', to=settings.AUTH_USER_MODEL, verbose_name='Deleted By'),
        ),
        migrations.AddField(
            model_name='adspots',
            name='updated_by',
            field=models.ForeignKey(blank=True, help_text='User who last modified this object', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='%(class)s_updated', to=settings.AUTH_USER_MODEL, verbose_name='Updated By'),
        ),
        migrations.CreateModel(
            name='AdSpotExclusion',
            fields=[
                ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('ad_spot_1', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='exclusions_1', to='campaigns.adspots')),
                ('ad_spot_2', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='exclusions_2', to='campaigns.adspots')),
            ],
            options={
                'db_table': 'AdSpotExclusion',
            },
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['status'], name='Adspots_status_f6b5a5_idx'),
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['campaign', 'status'], name='Adspots_campaig_fa7e06_idx'),
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['brand', 'status'], name='Adspots_brand_i_aea331_idx'),
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['channel', 'status'], name='Adspots_channel_27c965_idx'),
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['created_at'], name='Adspots_created_c77764_idx'),
        ),
        migrations.AddIndex(
            model_name='adspots',
            index=models.Index(fields=['is_active', 'status'], name='Adspots_is_acti_452de7_idx'),
        ),
        migrations.AddConstraint(
            model_name='adspotexclusion',
            constraint=models.UniqueConstraint(fields=('ad_spot_1', 'ad_spot_2'), name='unique_ad_spot_exclusion'),
        ),
    ]
