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

import apps.agencies.utils
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 = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Agency',
            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')),
                ('street_address', models.CharField(blank=True, help_text='Street address including number and street name', max_length=255, verbose_name='street address')),
                ('city', models.CharField(blank=True, help_text='City name', max_length=100, verbose_name='city')),
                ('state_province', models.CharField(blank=True, help_text='State or province name', max_length=100, verbose_name='state/province')),
                ('postal_code', models.CharField(blank=True, help_text='Postal or ZIP code', max_length=20, verbose_name='postal code')),
                ('country', models.CharField(blank=True, help_text='Country name', max_length=100, verbose_name='country')),
                ('latitude', models.DecimalField(blank=True, decimal_places=8, help_text='Latitude coordinate', max_digits=10, null=True, verbose_name='latitude')),
                ('longitude', models.DecimalField(blank=True, decimal_places=8, help_text='Longitude coordinate', max_digits=11, null=True, verbose_name='longitude')),
                ('name', models.CharField(db_index=True, help_text='The display name of the advertising agency as it appears to clients and in public listings. This should be the official business name or commonly used trading name.', max_length=200, verbose_name='Agency Name')),
                ('legal_name', models.CharField(blank=True, help_text='The legal business name of the agency if different from the display name. Used for contracts, invoicing, and legal documents.', max_length=200, verbose_name='Legal Name')),
                ('description', models.TextField(blank=True, help_text='Detailed description of the agency and its services. This appears in agency profiles and helps clients understand what the agency offers. Include key services, specializations, and unique value propositions.', verbose_name='Description')),
                ('logo', models.ImageField(blank=True, help_text='Agency logo image. Recommended size: 300x300 pixels or larger. Accepted formats: JPG, PNG, SVG, WebP. Maximum file size: 5MB.', null=True, upload_to=apps.agencies.utils.agency_logo_upload_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'jpeg', 'png', 'svg', 'webp'])], verbose_name='Logo')),
                ('website', models.URLField(blank=True, help_text='Agency website URL including http:// or https://. This link will be displayed in agency profiles.', validators=[django.core.validators.URLValidator()], verbose_name='Website')),
                ('phone', models.CharField(blank=True, help_text='Primary phone number including country code if international. Example formats: +1-555-123-4567, (555) 123-4567, +44 20 7123 4567', max_length=20, verbose_name='Phone Number')),
                ('email', models.EmailField(db_index=True, help_text='Primary email address for the agency. This will be used for platform communications and displayed in agency profiles.', max_length=254, validators=[django.core.validators.EmailValidator()], verbose_name='Email Address')),
                ('founded_year', models.PositiveIntegerField(blank=True, db_index=True, help_text='The year the agency was founded. Used to calculate agency experience and for historical context in profiles.', null=True, validators=[django.core.validators.MinValueValidator(1900), django.core.validators.MaxValueValidator(2030)], verbose_name='Founded Year')),
                ('agency_size', models.CharField(choices=[('startup', 'Startup (1-10 employees)'), ('small', 'Small (11-50 employees)'), ('medium', 'Medium (51-200 employees)'), ('large', 'Large (201-1000 employees)'), ('enterprise', 'Enterprise (1000+ employees)')], db_index=True, default='small', help_text="Size category based on employee count. This helps clients understand the agency's capacity and structure.", max_length=20, verbose_name='Agency Size')),
                ('employee_count', models.PositiveIntegerField(blank=True, help_text='Exact number of employees in the agency. This provides more precise information than the size category alone.', null=True, verbose_name='Employee Count')),
                ('specializations', models.JSONField(blank=True, default=list, help_text='List of agency specializations and service areas. Use this to highlight key competencies and expertise areas.', verbose_name='Specializations')),
                ('is_verified', models.BooleanField(db_index=True, default=False, help_text='Whether the agency has been verified by platform administrators. Verified agencies have enhanced credibility and may receive preferential placement in search results.', verbose_name='Verified')),
                ('is_featured', models.BooleanField(db_index=True, default=False, help_text='Whether to feature this agency in listings and search results. Featured agencies receive enhanced visibility and premium placement.', verbose_name='Featured')),
                ('is_active', models.BooleanField(db_index=True, default=True, help_text='Whether the agency is currently active on the platform. Inactive agencies are hidden from public listings but data is preserved.', verbose_name='Active')),
                ('time_zone', models.CharField(default='UTC', help_text='Primary time zone for the agency. Used for scheduling, campaign timing, and communication preferences.', max_length=50, verbose_name='Time Zone')),
                ('language', models.CharField(default='en', help_text="Primary language preference using ISO 639-1 code (e.g., 'en' for English, 'es' for Spanish, 'fr' for French).", max_length=10, verbose_name='Language')),
            ],
            options={
                'verbose_name': 'Agency',
                'verbose_name_plural': 'Agencies',
                'db_table': 'Agency',
                'ordering': ['-is_featured', '-is_verified', 'name'],
            },
        ),
        migrations.CreateModel(
            name='Brand',
            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(db_index=True, help_text='The official name of the brand', max_length=255, verbose_name='Brand Name')),
                ('description', models.TextField(blank=True, help_text='Brief description of the brand', max_length=1000, verbose_name='Description')),
                ('category', models.CharField(choices=[('technology', 'Technology'), ('fashion', 'Fashion'), ('food_beverage', 'Food & Beverage'), ('automotive', 'Automotive'), ('healthcare', 'Healthcare'), ('finance', 'Finance'), ('entertainment', 'Entertainment'), ('retail', 'Retail'), ('travel', 'Travel'), ('education', 'Education'), ('real_estate', 'Real Estate'), ('other', 'Other')], db_index=True, default='other', help_text='The industry category of this brand', max_length=50, verbose_name='Category')),
                ('logo', models.ImageField(blank=True, help_text='Brand logo image (JPG, PNG, SVG, WebP)', null=True, upload_to=apps.agencies.utils.brand_logo_upload_path, validators=[django.core.validators.FileExtensionValidator(allowed_extensions=['jpg', 'jpeg', 'png', 'svg', 'webp'])], verbose_name='Logo')),
                ('status', models.CharField(choices=[('active', 'Active'), ('inactive', 'Inactive'), ('pending', 'Pending'), ('suspended', 'Suspended'), ('archived', 'Archived')], db_index=True, default='active', help_text='Current status of the brand', max_length=20, verbose_name='Status')),
                ('is_featured', models.BooleanField(default=False, help_text='Whether this brand should be featured prominently', verbose_name='Featured Brand')),
                ('agency', models.ForeignKey(help_text='The agency managing this brand', on_delete=django.db.models.deletion.CASCADE, related_name='brands', to='agencies.agency', verbose_name='Agency')),
                ('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': 'Brand',
                'verbose_name_plural': 'Brands',
                'db_table': 'brands',
                'ordering': ['name'],
            },
        ),
        migrations.CreateModel(
            name='AgencyType',
            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(db_index=True, help_text='The name of the agency type (e.g., Full Service, Digital, Creative). This name will be displayed throughout the platform and should be descriptive and professional.', max_length=100, unique=True, verbose_name='Agency Type Name')),
                ('description', models.TextField(blank=True, help_text='Detailed description of what this agency type represents, including typical services, client types, and characteristics. This helps agencies and clients understand the category better.', verbose_name='Description')),
                ('color_code', models.CharField(db_index=True, default='#007bff', help_text='Hex color code for UI representation (e.g., #007bff). This color will be used in charts, badges, and other UI elements to visually distinguish this agency type.', max_length=7, verbose_name='Color Code')),
                ('sort_order', models.PositiveIntegerField(db_index=True, default=0, help_text='Order in which agency types should be displayed. Lower numbers appear first. Use this to strategically position important agency types at the top of lists.', verbose_name='Sort Order')),
                ('is_premium', models.BooleanField(db_index=True, default=False, help_text='Whether this is a premium agency type with special features such as enhanced visibility, priority placement, or exclusive access to certain platform features.', verbose_name='Premium Type')),
                ('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': 'Agency Type',
                'verbose_name_plural': 'Agency Types',
                'db_table': 'agencies_agency_type',
                'ordering': ['sort_order', 'name'],
            },
        ),
        migrations.CreateModel(
            name='AgencyTeamMember',
            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')),
                ('department', models.CharField(choices=[('management', 'Management'), ('account', 'Account Management'), ('creative', 'Creative'), ('strategy', 'Strategy'), ('media', 'Media'), ('production', 'Production'), ('digital', 'Digital'), ('analytics', 'Analytics'), ('finance', 'Finance'), ('hr', 'Human Resources'), ('other', 'Other')], default='other', help_text='Department within the agency', max_length=20, verbose_name='Department')),
                ('is_primary_contact', models.BooleanField(default=False, help_text='Whether this person is the primary contact for the agency', verbose_name='Primary Contact')),
                ('is_public', models.BooleanField(default=True, help_text='Whether to show this person in public agency listings', verbose_name='Public Profile')),
                ('years_experience', models.PositiveIntegerField(blank=True, help_text='Total years of professional experience', null=True, verbose_name='Years of Experience')),
                ('specializations', models.JSONField(blank=True, default=list, help_text='Areas of expertise and specialization', verbose_name='Specializations')),
                ('agency', models.ForeignKey(help_text='The agency this person works for', on_delete=django.db.models.deletion.CASCADE, related_name='team_members', to='agencies.agency', verbose_name='Agency')),
                ('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')),
                ('user', models.ForeignKey(blank=True, help_text='Associated user account (if any)', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='agency_memberships', to=settings.AUTH_USER_MODEL, verbose_name='User Account')),
            ],
            options={
                'verbose_name': 'Agency Team Member',
                'verbose_name_plural': 'Agency Team Members',
                'db_table': 'agencies_team_member',
                'ordering': ['-is_primary_contact', 'user__last_name', 'user__first_name'],
            },
        ),
        migrations.AddField(
            model_name='agency',
            name='agency_type',
            field=models.ForeignKey(help_text='The type/category of this agency (e.g., Full Service, Digital, Creative). This helps in categorizing and filtering agencies.', on_delete=django.db.models.deletion.PROTECT, related_name='agencies', to='agencies.agencytype', verbose_name='Agency Type'),
        ),
        migrations.AddField(
            model_name='agency',
            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='agency',
            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='agency',
            name='owner',
            field=models.ForeignKey(help_text='Primary owner of the agency with full administrative rights. The owner can manage all aspects of the agency including team members, brands, and campaigns.', on_delete=django.db.models.deletion.CASCADE, related_name='owned_agencies', to=settings.AUTH_USER_MODEL, verbose_name='Owner'),
        ),
        migrations.AddField(
            model_name='agency',
            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='Advertiser',
            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')),
                ('status', models.CharField(blank=True, max_length=255, null=True)),
                ('brand', models.ForeignKey(blank=True, db_column='id_brand', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to='agencies.brand')),
                ('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')),
                ('id_user', models.ForeignKey(blank=True, db_column='id_user', null=True, on_delete=django.db.models.deletion.DO_NOTHING, to=settings.AUTH_USER_MODEL)),
                ('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': 'Advertisers',
            },
        ),
        migrations.AddIndex(
            model_name='brand',
            index=models.Index(fields=['name', 'agency'], name='brands_name_783aa5_idx'),
        ),
        migrations.AddIndex(
            model_name='brand',
            index=models.Index(fields=['category', 'status'], name='brands_categor_5ac5d7_idx'),
        ),
        migrations.AddIndex(
            model_name='brand',
            index=models.Index(fields=['-created_at'], name='brands_created_7310c4_idx'),
        ),
        migrations.AlterUniqueTogether(
            name='brand',
            unique_together={('name', 'agency')},
        ),
        migrations.AddIndex(
            model_name='agencytype',
            index=models.Index(fields=['is_premium', 'sort_order'], name='idx_premium_sort'),
        ),
        migrations.AddIndex(
            model_name='agencytype',
            index=models.Index(condition=models.Q(('is_deleted', False)), fields=['is_premium'], name='idx_active_premium'),
        ),
        migrations.AddConstraint(
            model_name='agencytype',
            constraint=models.CheckConstraint(check=models.Q(('sort_order__gte', 0)), name='check_sort_order_positive'),
        ),
        migrations.AddConstraint(
            model_name='agencytype',
            constraint=models.CheckConstraint(check=models.Q(('color_code__regex', '^#[0-9A-Fa-f]{6}$')), name='check_color_code_format'),
        ),
        migrations.AddIndex(
            model_name='agency',
            index=models.Index(fields=['name'], name='Agency_name_6c250c_idx'),
        ),
        migrations.AddIndex(
            model_name='agency',
            index=models.Index(fields=['agency_type'], name='Agency_agency__dfc8d4_idx'),
        ),
        migrations.AddIndex(
            model_name='agency',
            index=models.Index(fields=['is_verified', 'is_active'], name='Agency_is_veri_1a07bd_idx'),
        ),
        migrations.AddIndex(
            model_name='agency',
            index=models.Index(fields=['is_featured', 'is_active'], name='Agency_is_feat_c4aabd_idx'),
        ),
    ]
