# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
#from _typeshed import SupportsDivMod
from django.db import models
import datetime
from django.utils import timezone

from django.db.models.expressions import Combinable

class AdbreakHistory(models.Model):
    id_adbreak_history = models.AutoField(primary_key=True)
    id_channel = models.IntegerField()
    datetime = models.DateTimeField()
    day = models.CharField(max_length=255)
    time = models.CharField(max_length=255)
    channel_name = models.CharField(max_length=255)
    duration = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Adbreak_history'


class Admins(models.Model):
    id_admin = models.AutoField(primary_key=True)
    admin = models.CharField(max_length=255, blank=True, null=True)
    password = models.CharField(max_length=255, blank=True, null=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Admins'


class Adspots(models.Model):
    id_adpost = models.AutoField(primary_key=True)
    id_campaign = models.ForeignKey('Campaigns', models.DO_NOTHING, db_column='id_campaign', blank=True, null=True)
    adspot_name = models.CharField(max_length=255, blank=True, null=True)
    original_filepath = models.CharField(max_length=255, blank=True, null=True)
    encoded_filepath = models.CharField(max_length=255, blank=True, null=True)
    duration = models.CharField(max_length=255, blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    filename = models.CharField(max_length=255, blank=True, null=True)
    url_from_vast = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)
    # Old Once
    id_channel = models.ForeignKey('Channels', models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
    id_brand = models.ForeignKey('Brands', models.DO_NOTHING, db_column='id_brand', blank=True, null=True) 
    creative_id=models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Adspots'



    def get_impressions(self, spot,start_date=None, end_date=None):
        """
        Get impression statistics for this spot
        """
        queryset = VastResponseGo.objects.filter(datetime_timestamp__contains=start_date)  # Start with all records
        # adspot_obj = Adspots.objects.get(adspot_name="LegoPorsche.ts")
        # Apply date filters if provided
        if spot:
            queryset = queryset.filter(datetime_timestamp__contains=start_date,ad_spot=spot)
        if end_date:
            queryset = queryset.filter(datetime_timestamp__lte=end_date)

        stats = {
            'total_requests': queryset.count(),
            # 'successful_impressions': queryset.filter(
            #     impression_sprintserve_status__isnull=True
            # ).count(),
            # 'failed_impressions': queryset.filter(
            #     impression_sprintserve_status__isnull=True
            # ).count(),
            # 'completion_rate': queryset.filter(
            #     tracking_completed_status__isnull=True
            # ).count(),
            # 'quartile_stats': {
            #     'first': queryset.filter(tracking_firstquartile_status__isnull=True).count(),
            #     'mid': queryset.filter(tracking_midpoint_status__isnull=False).count(),
            #     'third': queryset.filter(tracking_thirdquartile_status__isnull=False).count(),
            #     'complete': queryset.filter(tracking_completed_status__isnull=False).count(),
            # }
        }
       
        return stats

    @classmethod
    def get_spots_impressions(cls, start_date=None, end_date=None):
        """
        Get impression statistics for all spots in each campaign.
        """
        # Define the campaigns
        campaigns = ["Too Good To Go 30s", "Too Good To Go 60s"]
        results = []

        for campaign_name in campaigns:
            try:
                # Fetch the campaign object by name
                campaign_obj = Campaigns.objects.get(name=campaign_name)
                # Fetch spots associated with the campaign
                spots = cls.objects.filter(id_campaign=campaign_obj)

                # List to hold each spot's information for the campaign
                campaign_spots = []
                for spot in spots:
                    # Fetch impression statistics for the spot
                    stats = spot.get_impressions(spot, start_date, end_date)
                    
                    # Append spot information to the campaign spots list
                    campaign_spots.append({
                        'spot_id': spot.id_adpost,
                        'spot_name': spot.adspot_name,
                        'brand_name': spot.id_brand.brand_name if spot.id_brand else 'Unknown',
                        'stats': stats
                    })

                # Append campaign information to results
                results.append({
                    'campaign': campaign_name,
                    'spots': campaign_spots
                })

            except Campaigns.DoesNotExist:
                print(f"Campaign {campaign_name} not found.")
                continue

        return results


class AdspotsInAvail(models.Model):
    id_adsinavail = models.AutoField(primary_key=True)
    id_avail = models.ForeignKey('Avails', models.DO_NOTHING, db_column='id_avail', blank=True, null=True)
    id_adspot = models.ForeignKey(Adspots, models.DO_NOTHING, db_column='id_adspot', blank=True, null=True)
    #creative_id=models.CharField(max_length=255)
    positioninavail = models.IntegerField(db_column='positionInAvail', blank=True, null=True)  # Field name made lowercase.
    trafficid = models.IntegerField(db_column='trafficId', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'Adspots_in_avail'


class Avails(models.Model):
    id_avail = models.AutoField(primary_key=True)
    id_window = models.ForeignKey('Windows', models.DO_NOTHING, db_column='id_window', blank=True, null=True)
    avail_start = models.CharField(max_length=255, blank=True, null=True)
    ###########amine
    #creative_id=models.CharField(max_length=255)
    availinwindow = models.CharField(db_column='availInWindow', max_length=255, blank=True, null=True)  # Field name made lowercase.
    datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Avails'


class Brands(models.Model):
    id_brand = models.AutoField(primary_key=True)
    brand_name = models.CharField(max_length=255, blank=True, null=True)
    id_agency = models.ForeignKey('Agency', models.DO_NOTHING, db_column='id_agency', blank=True, null=True)
    description = models.CharField(max_length=255, blank=True, null=True)
    category = models.CharField(max_length=255, blank=True, null=True)
    logo = models.CharField(max_length=255, blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Brands'


# class Campaigns(models.Model):
#     id_campaign = models.AutoField(primary_key=True)
#     name = models.CharField(max_length=255)
#     id_adpost = models.IntegerField()
#     id_brand = models.IntegerField()
#     pacing = models.IntegerField()
#     start_day = models.CharField(max_length=255)
#     end_day = models.CharField(max_length=255)
#     volume = models.IntegerField()
#     delivery = models.IntegerField()
#     cpm = models.FloatField()
#     general_rotation = models.IntegerField()
#
#     class Meta:
#         managed = False
#         db_table = 'Campaigns'


class ChannelCodec(models.Model):
    id_ch_codec = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey('Channels', models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
    ffmpeg_cmd = models.CharField(db_column='FFmpeg_cmd', max_length=255, blank=True, null=True)  # Field name made lowercase.
    ateme_cmd = models.CharField(db_column='Ateme_cmd', max_length=255, blank=True, null=True)  # Field name made lowercase.

    class Meta:
        managed = False
        db_table = 'Channel_codec'


class Channels(models.Model):
    id_channel = models.AutoField(primary_key=True)
    id_user = models.ForeignKey('Users', models.DO_NOTHING, db_column='id_user', blank=True, null=True)
    channel_name = models.CharField(max_length=255, blank=True, null=True)
    channel_desc = models.CharField(max_length=255, blank=True, null=True)
    channel_lang = models.CharField(max_length=255, blank=True, null=True)
    channel_genre = models.CharField(max_length=255, blank=True, null=True)
    ftp_channel_name = models.CharField(max_length=255, blank=True, null=True)
    sfr_channel_name = models.CharField(max_length=255, blank=True, null=True)
    networkname = models.CharField(db_column='networkName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    zonename = models.CharField(db_column='zoneName', max_length=255, blank=True, null=True)  # Field name made lowercase.
    creation_datetime = models.DateTimeField(blank=True, null=True)
    modif_datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Channels'


class ChannelsZone(models.Model):
    id_zone_channel = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
    region = models.CharField(max_length=255, blank=True, null=True)
    zonename = models.CharField(max_length=255, blank=True, null=True)
    networkname = models.CharField(max_length=32, blank=True, null=True)
    verifs_number = models.CharField(max_length=255, blank=True, null=True)
    sfr_name = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Channels_zone'


class DayTime(models.Model):
    id_time = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    start = models.CharField(max_length=255)
    end = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Day_time'

###########amine
class Pending(models.Model):
    id_pending=models.AutoField(primary_key=True)
    creative_id=models.CharField(max_length=255)
    url=models.CharField(max_length=255)
    duration=models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Pending'



class Epg(models.Model):
    id_emission = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
    emission_name = models.CharField(max_length=255, blank=True, null=True)
    # start_date = models.DateField(blank=True, null=True)
    start_time = models.DateTimeField(blank=True, null=True)
    # end_date = models.DateField(blank=True, null=True)
    end_time = models.DateTimeField(blank=True, null=True)
    genre = models.CharField(max_length=255, blank=True, null=True)
    category = models.CharField(max_length=255, blank=True, null=True)
    class Meta :
        managed = False
        db_table = "Epg"

class Jingles(models.Model):
    id_jingle = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel')
    jingle_name = models.CharField(max_length=255)
    video_jingle = models.CharField(max_length=255)
    md5_file = models.CharField(max_length=255)
    creation_datetime = models.DateTimeField()
    modif_datetime = models.DateTimeField()
    status = models.IntegerField()
    is_delete = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'Jingles'


# class Placement(models.Model):
#     id_placement = models.AutoField(primary_key=True)
#     id_time = models.IntegerField()
#     id_campaign = models.IntegerField()
#     id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
#
#     class Meta:
#         managed = False
#         db_table = 'Placement'

class Agency(models.Model):
    id_agency = models.AutoField(primary_key=True)
    id_user = models.ForeignKey('Users', models.DO_NOTHING, db_column='id_user', blank=True, null=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    description = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)
    is_deleted = models.IntegerField()

    class Meta:
        managed = False
        db_table = 'Agency'


class Playlists(models.Model):
    id_playlist = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel', blank=True, null=True)
    id_zone_channel = models.ForeignKey(ChannelsZone, models.DO_NOTHING, db_column='id_zone_channel', blank=True, null=True)
    version = models.CharField(max_length=255, blank=True, null=True)
    broadcastdate = models.CharField(max_length=255, blank=True, null=True)
    start_date = models.DateTimeField(blank=True, null=True)
    end_date = models.DateTimeField(blank=True, null=True)
    filepath = models.CharField(max_length=255, blank=True, null=True)
    is_draft = models.IntegerField()
    draft_version = models.IntegerField()
    creation_datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Playlists'


class SfrAnalytics(models.Model):
    id_impression = models.AutoField(primary_key=True)
    sfr_channel_name = models.CharField(max_length=255, blank=True, null=True)
    day = models.CharField(max_length=255, blank=True, null=True)
    region = models.CharField(max_length=255, blank=True, null=True)
    cible = models.CharField(max_length=255, blank=True, null=True)
    indicateur = models.CharField(max_length=255, blank=True, null=True)
    minute = models.CharField(max_length=255, blank=True, null=True)
    purcent = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'SFR_analytics'


class Useraccess(models.Model):
    id_access = models.AutoField(primary_key=True)
    id_user = models.ForeignKey('Users', models.DO_NOTHING, db_column='id_user', blank=True, null=True)
    api_key = models.CharField(max_length=255, blank=True, null=True)
    ftp_prototype = models.CharField(max_length=255, blank=True, null=True)
    ftp_server = models.CharField(max_length=255, blank=True, null=True)
    ftp_port = models.CharField(max_length=255, blank=True, null=True)
    ftp_user = models.CharField(max_length=255, blank=True, null=True)
    ftp_password = models.CharField(max_length=255, blank=True, null=True)
    openvpn_user = models.CharField(max_length=255, blank=True, null=True)
    openvpn_password = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'UserAccess'


class Users(models.Model):
    id_user = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    type = models.CharField(max_length=255, blank=True, null=True)
    email = models.CharField(max_length=255, blank=True, null=True)
    userlogin = models.CharField(max_length=255, blank=True, null=True)
    userpass = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Users'


class UsersAdvertisers(models.Model):
    id_user_advertiser = models.AutoField(primary_key=True)
    id_user = models.ForeignKey(Users, models.DO_NOTHING, db_column='id_user', blank=True, null=True)
    id_brand = models.ForeignKey(Brands, models.DO_NOTHING, db_column='id_brand', blank=True, null=True)
    status = models.CharField(max_length=255, blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Users_Advertisers'


class Windows(models.Model):
    id_window = models.AutoField(primary_key=True)
    id_playlist = models.ForeignKey(Playlists, models.DO_NOTHING, db_column='id_playlist', blank=True, null=True)
    window_start = models.CharField(max_length=255, blank=True, null=True)
    window_end = models.CharField(max_length=255, blank=True, null=True)
    window_duration = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Windows'


class AuthGroup(models.Model):
    name = models.CharField(unique=True, max_length=150)

    class Meta:
        managed = False
        db_table = 'auth_group'


class AuthGroupPermissions(models.Model):
    id = models.BigAutoField(primary_key=True)
    group = models.ForeignKey(AuthGroup, models.DO_NOTHING)
    permission = models.ForeignKey('AuthPermission', models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_group_permissions'
        unique_together = (('group', 'permission'),)


class AuthPermission(models.Model):
    name = models.CharField(max_length=255)
    content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING)
    codename = models.CharField(max_length=100)

    class Meta:
        managed = False
        db_table = 'auth_permission'
        unique_together = (('content_type', 'codename'),)


class AuthUser(models.Model):
    password = models.CharField(max_length=128)
    last_login = models.DateTimeField(blank=True, null=True)
    is_superuser = models.IntegerField()
    username = models.CharField(unique=True, max_length=150)
    first_name = models.CharField(max_length=150)
    last_name = models.CharField(max_length=150)
    email = models.CharField(max_length=254)
    is_staff = models.IntegerField()
    is_active = models.IntegerField()
    date_joined = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'auth_user'


class AuthUserGroups(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)
    group = models.ForeignKey(AuthGroup, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_user_groups'
        unique_together = (('user', 'group'),)


class AuthUserUserPermissions(models.Model):
    id = models.BigAutoField(primary_key=True)
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)
    permission = models.ForeignKey(AuthPermission, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'auth_user_user_permissions'
        unique_together = (('user', 'permission'),)


class CorsheadersCorsmodel(models.Model):
    cors = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'corsheaders_corsmodel'


class DjangoAdminLog(models.Model):
    action_time = models.DateTimeField()
    object_id = models.TextField(blank=True, null=True)
    object_repr = models.CharField(max_length=200)
    action_flag = models.PositiveSmallIntegerField()
    change_message = models.TextField()
    content_type = models.ForeignKey('DjangoContentType', models.DO_NOTHING, blank=True, null=True)
    user = models.ForeignKey(AuthUser, models.DO_NOTHING)

    class Meta:
        managed = False
        db_table = 'django_admin_log'


class DjangoContentType(models.Model):
    app_label = models.CharField(max_length=100)
    model = models.CharField(max_length=100)

    class Meta:
        managed = False
        db_table = 'django_content_type'
        unique_together = (('app_label', 'model'),)


class DjangoMigrations(models.Model):
    id = models.BigAutoField(primary_key=True)
    app = models.CharField(max_length=255)
    name = models.CharField(max_length=255)
    applied = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'django_migrations'


class DjangoSession(models.Model):
    session_key = models.CharField(primary_key=True, max_length=40)
    session_data = models.TextField()
    expire_date = models.DateTimeField()

    class Meta:
        managed = False
        db_table = 'django_session'


class Adbreak_history(models.Model):
    id_adbreak_history = models.AutoField(primary_key=True)
    id_channel = models.ForeignKey(Channels , models.DO_NOTHING , db_column='id_channel' ,blank=True, null=True)
    datetime = models.DateTimeField(blank=True, null=True)
    day = models.DateField(blank=True, null=True)
    time = models.TimeField(blank=True, null=True)
    channel_name = models.CharField(max_length = 255 , blank=True, null=True)
    duration = models.CharField(max_length = 255 ,blank=True, null=True)

    class Meta :
        managed = False
        db_table = 'Adbreak_history'

class Day_times(models.Model):
    id_time = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)

    class Meta :
        managed = False
        db_table = 'day_time'

class CampaignStatus(models.TextChoices):
    Prebooked = 'Prebooked'
    Booked = 'Booked'
    Canceled = 'Canceled'
    In_progress = 'In progress'
    Treminated = 'Treminated'  

class Campaigns(models.Model):
    id_campaign = models.AutoField(primary_key=True)
    name = models.CharField(max_length=255)
    id_adpost = models.ForeignKey(Adspots,models.DO_NOTHING , db_column='id_adpost',blank=True, null=True )
    id_brand = models.ForeignKey(Brands,models.DO_NOTHING , db_column='id_brand',blank=True, null=True )
    pacing = models.BooleanField(blank=True, null=True)
    start_day = models.CharField(max_length=255)
    end_day = models.CharField(max_length=255)
    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()
    id_user = models.ForeignKey(Users,models.DO_NOTHING , db_column='id_user',blank=True, null=True )
    booked = models.BooleanField(blank=True, null=True)
    # New Attributes 
    id_agency =  models.ForeignKey(Agency, models.DO_NOTHING, db_column='id_agency', blank=True, null=True)
    product = models.CharField(max_length=255, null=True)
    category = models.CharField(max_length=255, null=True)
    country = models.CharField(max_length=255, null=True)
    budget = models.FloatField(default=0.0)
    broadcasts_day = models.IntegerField(blank=True, null=True)
    media_type = models.CharField(max_length=255, null=True)
    status = models.CharField(max_length=25, choices=CampaignStatus.choices, default=CampaignStatus.Prebooked) 
    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(max_length=255, blank=True, null=True)
    shows_preference = models.CharField(max_length=255, blank=True, null=True)
    position_preference = models.CharField(max_length=255, blank=True, null=True)

    def __str__(self):
        return self.name

    class Meta :
        managed = False
        db_table = 'Campaigns'


class CampaignTimeIntervals(models.Model):
    id = models.AutoField(primary_key=True)
    campaign = models.ForeignKey(Campaigns, on_delete=models.CASCADE, verbose_name="Campaign")
    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")

    class Meta:
        managed = False
        db_table = 'CampaignTimeIntervals'


class Placement(models.Model):
    id_placement = models.AutoField(primary_key=True)
    id_time = models.ForeignKey(DayTime,models.DO_NOTHING , db_column='id_time',blank=True, null=True )
    id_campaign = models.ForeignKey(Campaigns,models.DO_NOTHING , db_column='id_campaign',blank=True, null=True )
    id_channel = models.ForeignKey(Channels, models.DO_NOTHING, db_column='id_channel', blank=True, null=True)

    class Meta :
        managed = False
        db_table = 'Placement'


class Sfr_analytics(models.Model):
    id_impression = models.AutoField(primary_key=True)
    sfr_channel_name  = models.CharField(max_length=255)
    day = models.DateField(blank=True, null=True)
    region = models.CharField(max_length=255)
    cible  = models.CharField(max_length=255)
    indicateur = models.CharField(max_length=255)
    minute = models.TimeField(blank=True, null=True)
    purcent = models.FloatField(blank=True, null=True)

    class Meta :
        managed = False
        db_table = "SFR_analytics"

class Impressions(models.Model):
    id = models.AutoField(primary_key=True)
    tool_name = models.CharField(max_length=255)
    total_users = models.IntegerField()
    market_share_purcent = models.FloatField(blank=True, null=True)
    region = models.CharField(max_length=255)

    class Meta :
        managed = False
        db_table = "SFR_market_share"

class Verifs(models.Model):
    id_verif =  models.AutoField(primary_key=True)
    networkname = models.CharField(max_length=255)
    zonename = models.CharField(max_length=255)
    broadcastDate = models.CharField(max_length=255)
    trafficId = models.IntegerField()
    spotId =models.CharField(max_length=255)
    airTime= models.CharField(max_length=255)
    airLength=models.CharField(max_length=255)
    airStatuscode=models.CharField(max_length=255)
    revision =models.IntegerField()
    vercomplete = models.CharField(db_column='verComplete', max_length=50, blank=True, null=True)  # Field name made lowercase.

    class Meta :
        managed = False
        db_table = "Verifs"
class Sfr_predict(models.Model):
    id_impression = models.AutoField(primary_key=True)
    sfr_channel_name  = models.CharField(max_length=255)
    day = models.DateField(blank=True, null=True)
    region = models.CharField(max_length=255)
    cible  = models.CharField(max_length=255)
    indicateur = models.CharField(max_length=255)
    minute = models.TimeField(blank=True, null=True)
    purcent = models.FloatField(blank=True, null=True)

    class Meta :
        managed = False
        db_table = "SFR_predict"


class Adbreak_predict(models.Model):
    id_adbreak_history = models.AutoField(primary_key=True)
    id_channel = models.IntegerField()
    datetime = models.DateTimeField()
    day = models.CharField(max_length=255)
    time = models.CharField(max_length=255)
    channel_name = models.CharField(max_length=255)
    duration = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Adbreak_predict'


class Activity(models.Model):
    id_activity = models.AutoField(primary_key=True)
    activity = models.CharField(max_length=255)
    date = models.DateField()
    description = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Activity'


class RealTimeAdbreak(models.Model):
    id_rta = models.AutoField(primary_key=True)
    id_channel = models.IntegerField(blank=True, null=True)
    start_at = models.CharField(max_length=255, blank=True, null=True)
    duration = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'Real_time_adbreak'


class Bouygues_analytics(models.Model):
    id_bouygue = models.AutoField(primary_key=True)
    channel_name  = models.CharField(max_length=255)
    day = models.DateField(blank=True, null=True)
    cible  = models.CharField(max_length=255)
    minute = models.TimeField(blank=True, null=True)
    purcent = models.FloatField(blank=True, null=True)

    class Meta :
        managed = False
        db_table = "Bouygues_analytics"

        
class VastResponseGo(models.Model):
    id_vast = models.AutoField(primary_key=True)
    ad_id = models.CharField(db_column='AD_id', max_length=20, blank=True, null=True)  # Field name made lowercase.
    tracking_start = models.TextField(db_column='Tracking_start', blank=True, null=True)  # Field name made lowercase.
    tracking_firstquartile = models.TextField(db_column='Tracking_firstQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_midpoint = models.TextField(db_column='Tracking_midpoint', blank=True, null=True)  # Field name made lowercase.
    tracking_thirdquartile = models.TextField(db_column='Tracking_thirdQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_complete = models.TextField(db_column='Tracking_complete', blank=True, null=True)  # Field name made lowercase.
    datetime_timestamp = models.DateTimeField(blank=True, null=True)
    datetime_string = models.CharField(max_length=20, blank=True, null=True)
    status = models.TextField(blank=True, null=True)
    vast_url = models.TextField(blank=True, null=True)
    impression_double_click = models.TextField(blank=True, null=True)
    impression_sprintserve = models.TextField(blank=True, null=True)
    tracking_start_status = models.TextField(blank=True, null=True)
    tracking_firstquartile_status = models.TextField(blank=True, null=True)
    tracking_midpoint_status = models.TextField(blank=True, null=True)
    tracking_thirdquartile_status = models.TextField(blank=True, null=True)
    impression_sprintserve_status = models.TextField(blank=True, null=True)
    impression_double_click_status = models.TextField(blank=True, null=True)
    tracking_completed_status = models.TextField(blank=True, null=True)
    media_file = models.TextField(blank=True, null=True)
    adspot_link = models.TextField(blank=True, null=True)
    ad_spot = models.ForeignKey(Adspots, models.DO_NOTHING, blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'VAST_response_GO'

class VastResponse(models.Model):
    id_vast = models.AutoField(primary_key=True)
    ad_id = models.CharField(db_column='AD_id', max_length=20, blank=True, null=True)  # Field name made lowercase.
    tracking_start = models.TextField(db_column='Tracking_start', blank=True, null=True)  # Field name made lowercase.
    tracking_firstquartile = models.TextField(db_column='Tracking_firstQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_midpoint = models.TextField(db_column='Tracking_midpoint', blank=True, null=True)  # Field name made lowercase.
    tracking_thirdquartile = models.TextField(db_column='Tracking_thirdQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_complete = models.TextField(db_column='Tracking_complete', blank=True, null=True)  # Field name made lowercase.
    datetime_timestamp = models.DateTimeField(blank=True, null=True)
    datetime_string = models.CharField(max_length=20, blank=True, null=True)
    status = models.TextField(blank=True, null=True)
    vast_url = models.TextField(blank=True, null=True)
    impression_double_click = models.TextField(blank=True, null=True)
    impression_sprintserve = models.TextField(blank=True, null=True)
    tracking_start_status = models.TextField(blank=True, null=True)
    tracking_firstquartile_status = models.TextField(blank=True, null=True)
    tracking_midpoint_status = models.TextField(blank=True, null=True)
    tracking_thirdquartile_status = models.TextField(blank=True, null=True)
    impression_sprintserve_status = models.TextField(blank=True, null=True)
    impression_double_click_status = models.TextField(blank=True, null=True)
    tracking_completed_status = models.TextField(blank=True, null=True)
    ad_spot = models.ForeignKey(Adspots, on_delete=models.CASCADE, related_name="vast_responses")
    
    def __str__(self):
        return str(self.tracking_complete)

    class Meta:
        managed = False
        db_table = 'VAST_response'
    
class VastResponse2910(models.Model):
    id_vast = models.IntegerField()
    ad_id = models.CharField(db_column='AD_id', max_length=20, blank=True, null=True)  # Field name made lowercase.
    tracking_start = models.TextField(db_column='Tracking_start', blank=True, null=True)  # Field name made lowercase.
    tracking_firstquartile = models.TextField(db_column='Tracking_firstQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_midpoint = models.TextField(db_column='Tracking_midpoint', blank=True, null=True)  # Field name made lowercase.
    tracking_thirdquartile = models.TextField(db_column='Tracking_thirdQuartile', blank=True, null=True)  # Field name made lowercase.
    tracking_complete = models.TextField(db_column='Tracking_complete', blank=True, null=True)  # Field name made lowercase.
    datetime_timestamp = models.DateTimeField(blank=True, null=True)
    datetime_string = models.CharField(max_length=20, blank=True, null=True)
    status = models.TextField(blank=True, null=True)
    vast_url = models.TextField(blank=True, null=True)
    impression_double_click = models.TextField(blank=True, null=True)
    impression_sprintserve = models.TextField(blank=True, null=True)
    tracking_start_status = models.TextField(blank=True, null=True)
    tracking_firstquartile_status = models.TextField(blank=True, null=True)
    tracking_midpoint_status = models.TextField(blank=True, null=True)
    tracking_thirdquartile_status = models.TextField(blank=True, null=True)
    impression_sprintserve_status = models.TextField(blank=True, null=True)
    impression_double_click_status = models.TextField(blank=True, null=True)
    tracking_completed_status = models.TextField(blank=True, null=True)
    media_file = models.TextField(blank=True, null=True)
    adspot_link = models.TextField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'VAST_RESPONSE_29_10'


class AdslotsVisionr(models.Model):
    id = models.AutoField(db_column='ID', primary_key=True)  # Field name made lowercase.
    adid = models.CharField(db_column='AdId', max_length=255)  # Field name made lowercase.
    subid = models.CharField(db_column='SubId', max_length=255)  # Field name made lowercase.
    start = models.TimeField(db_column='Start')  # Field name made lowercase.
    end = models.TimeField(db_column='End', blank=True, null=True)  # Field name made lowercase.
    startts = models.BigIntegerField(db_column='StartTs', blank=True, null=True)  # Field name made lowercase.
    endts = models.BigIntegerField(db_column='EndTs', blank=True, null=True)  # Field name made lowercase.
    cut = models.IntegerField(db_column='Cut', blank=True, null=True)  # Field name made lowercase.
    scenario = models.TextField(db_column='Scenario', blank=True, null=True)  # Field name made lowercase.
    duration = models.IntegerField(db_column='Duration', blank=True, null=True)  # Field name made lowercase.
    ispub = models.IntegerField(db_column='IsPub', blank=True, null=True)  # Field name made lowercase.
    title = models.TextField(db_column='Title', blank=True, null=True)  # Field name made lowercase.
    replacementadid = models.CharField(db_column='ReplacementAdId', max_length=255, blank=True, null=True)  # Field name made lowercase.
    replacementpath = models.CharField(db_column='ReplacementPath', max_length=255, blank=True, null=True)  # Field name made lowercase.
    replacementduration = models.IntegerField(db_column='ReplacementDuration', blank=True, null=True)  # Field name made lowercase.
    status = models.CharField(db_column='Status', max_length=50, blank=True, null=True)  # Field name made lowercase.
    updatesent = models.IntegerField(db_column='UpdateSent', blank=True, null=True)  # Field name made lowercase.
    playlistdate = models.DateField(db_column='PlaylistDate', blank=True, null=True)  # Field name made lowercase.
    channel_id = models.IntegerField(db_column='Channel_ID', blank=True, null=True)  # Field name made lowercase.

    class Meta:
        unique_together = ('subid', 'playlistdate',)
        managed = False
        db_table = 'AdSlots_VisionR'

class AlmaAds(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    name = models.CharField(max_length=255, blank=True, null=True)
    ads_path = models.CharField(max_length=255, blank=True, null=True)
    duration = models.CharField(max_length=255, blank=True, null=True)

    class Meta:
        
        managed = False
        db_table = 'Alma_Ads'


class Adbreaks(models.Model):
    id_adbreak = models.AutoField(primary_key=True)
    id_channel = models.IntegerField()
    start_at = models.DateTimeField()
    duration = models.FloatField(blank=True, null=True)
    channel_name = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'Adbreaks'


class Campaignairtimelog(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    campaign = models.ForeignKey('Campaigns', models.DO_NOTHING, blank=True, null=True)
    spot = models.ForeignKey(Adspots, models.DO_NOTHING, blank=True, null=True)
    ad_break = models.ForeignKey(Adbreaks, models.DO_NOTHING, blank=True, null=True)
    airtime_start = models.DateTimeField(blank=True, null=True)
    airtime_end = models.DateTimeField(blank=True, null=True)
    insertion_status = models.BooleanField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'CampaignAirtimeLog'


class CampaignPriorityScores(models.Model):
    id = models.AutoField(db_column='id', primary_key=True)
    # The foreign key referencing the associated Campaign.
    campaign = models.ForeignKey(
        'Campaigns',
        on_delete=models.DO_NOTHING,
        help_text="The foreign key referencing the associated Campaign.", 
        blank=True, 
        null=True
    )
    # The priority score calculated for the campaign on the given date.
    priority_score = models.FloatField(
        blank=True,
        null=True,
        help_text="The priority score calculated for the campaign on the given date."
    ) 
    # The date and time when the priority score record was created.
    created_at = models.DateTimeField( 
        auto_now_add=True,
        help_text="The date and time when the priority score record was created."
    )
    # The date and time when the priority score record was updated.
    updated_at = models.DateTimeField(
        auto_now=True,
        help_text="The date and time when the priority score record was last updated."
    )

    class Meta:
        managed = False
        db_table = 'CampaignPriorityScores'


 
class ConductorData(models.Model):
    """
    Model to store conductor data.
    """

    date = models.DateField(
        verbose_name="Date",
        help_text="The date of the ad-break."
    )
    ad_break_start_at = models.TimeField(
        verbose_name="Ad Break Start Time",
        help_text="The start time of the ad break."
    )   
    ad_break_end_at = models.TimeField(
        verbose_name="Ad Break End Time",
        help_text="The end time of the ad break."
    ) 
    channel = models.CharField(
        max_length=50,
        verbose_name="Channel",
        help_text="The channel of the broadcast."
    )  
    duree = models.CharField(
        max_length=50,
        verbose_name="Duration",
        blank=True,
        null=True,
        help_text="The duration of the ad break."
    ) 
    show_before = models.CharField(
        max_length=255,
        verbose_name="Show Before",
        blank=True,
        null=True,
        help_text="The show before the ad break."
    ) 
    show_after = models.CharField(
        max_length=255,
        verbose_name="Show After",
        blank=True,
        null=True,
        help_text="The show after the ad break."
    ) 
    if_show_during = models.BooleanField(
        default=True,
        verbose_name="Show During",
        help_text="Boolean indicating if the ad break is shown during a show."
    )
    created_at = models.DateTimeField(
        auto_now_add=True,
        verbose_name="Created At",
        help_text="The date and time when the record was created."
    )
    updated_at = models.DateTimeField(
        auto_now=True,
        verbose_name="Updated At",
        help_text="The date and time when the record was last updated."
    )

    class Meta:
        managed = False
        db_table = 'conductor_data'
        verbose_name_plural = "Conductor Data"
        indexes = [models.Index(fields=['ad_break_start_at'], name='idx_ad_break_start_at'),]

    def save(self, *args, **kwargs):
        if not self.date:
            # If date is not set, set it to yesterday's date
            self.date = timezone.now().date() - timezone.timedelta(days=1)
        super().save(*args, **kwargs)


from django.core.exceptions import ValidationError

class AdSpotExclusion(models.Model):
    ad_spot_1 = models.ForeignKey(Adspots, related_name='exclusions_1', on_delete=models.CASCADE)
    ad_spot_2 = models.ForeignKey(Adspots, related_name='exclusions_2', on_delete=models.CASCADE)

    def clean(self):
        if self.ad_spot_1 == self.ad_spot_2:
            raise ValidationError("Ad spots cannot exclude themselves.")

    class Meta:
        managed = False
        db_table = 'AdSpotExclusion'
        constraints = [
            models.UniqueConstraint(fields=['ad_spot_1', 'ad_spot_2'], name='unique_ad_spot_exclusion')
        ]

class Trackinglink(models.Model):
    id = models.BigAutoField(primary_key=True)
    spot = models.CharField(max_length=250)
    url = models.CharField(max_length=500)
    status_code = models.IntegerField(blank=True, null=True)
    request_count = models.IntegerField(blank=True, null=True)

    class Meta:
        managed = False
        db_table = 'TrackingLink'