from django.db import models

### STAR SCHEMA ###

### DIMENSIONS ###

class dCorretores(models.Model):
    corretor_id = models.IntegerField(primary_key=True)
    corretor = models.CharField(max_length=100)
    
    def __str__(self):
        return self.corretor

    class Meta:
        managed = False
        db_table = 'dCorretores'
        app_label = 'boulevarddosipes'


class dEtapasFunil(models.Model):
    etapa_funil_id = models.IntegerField(primary_key=True)
    etapa_funil = models.CharField(max_length=100)
    
    def __str__(self):
        return self.etapa_funil

    class Meta:
        managed = False
        db_table = 'dEtapasFunil'
        app_label = 'boulevarddosipes'


class dMidias(models.Model):
    midia_id = models.IntegerField(primary_key=True)
    midia = models.CharField(max_length=100)
    
    def __str__(self):
        return self.midia

    class Meta:
        managed = False
        db_table = 'dMidias'
        app_label = 'boulevarddosipes'


class dMotivosDePerda(models.Model):
    motivo_perda_id = models.IntegerField(primary_key=True)
    motivo_perda = models.CharField(max_length=100)
    
    def __str__(self):
        return self.motivo_perda

    class Meta:
        managed = False
        db_table = 'dMotivosDePerda'
        app_label = 'boulevarddosipes'


class dResponsaveis(models.Model):
    responsavel_id = models.IntegerField(primary_key=True)
    responsavel = models.CharField(max_length=100)
    
    def __str__(self):
        return self.responsavel

    class Meta:
        managed = False
        db_table = 'dResponsaveis'
        app_label = 'boulevarddosipes'


class dStatus(models.Model):
    status_id = models.IntegerField(primary_key=True)
    status = models.CharField(max_length=100)
    
    def __str__(self):
        return self.status

    class Meta:
        managed = False
        db_table = 'dStatus'
        app_label = 'boulevarddosipes'


class dUTMs(models.Model):
    utm_id = models.IntegerField(primary_key=True)
    utm_source = models.CharField(max_length=200)
    utm_content = models.CharField(max_length=200)
    utm_campaign = models.CharField(max_length=200)
    utm_term = models.CharField(max_length=200)
    
    def __str__(self):
        return f"UTM Source: {self.utm_source} - UTM Content: {self.utm_content} - UTM Campaign: {self.utm_campaign} - UTM Term: {self.utm_term}"

    class Meta:
        managed = False
        db_table = 'dUTMs'
        app_label = 'boulevarddosipes'


### FACTS ###

class fLeads(models.Model):
    lead_id = models.PositiveIntegerField(primary_key=True)
    id_kommo = models.PositiveIntegerField()
    nome = models.CharField(max_length=100)
    data = models.DateTimeField()
    pixerama = models.CharField(max_length=3)
    responsavel_id = models.ForeignKey(dResponsaveis, on_delete=models.DO_NOTHING, db_column='responsavel_id')
    etapa_funil_id = models.ForeignKey(dEtapasFunil, on_delete=models.DO_NOTHING, db_column='etapa_funil_id',  related_name='fleads_funil')
    etapa_funil_antes_perdido_id = models.ForeignKey(dEtapasFunil, on_delete=models.DO_NOTHING, db_column='etapa_funil_antes_perdido_id',  related_name='fleads_funil_antes_perdido')
    status_id = models.ForeignKey(dStatus, on_delete=models.DO_NOTHING, db_column='status_id')
    motivo_perda_id = models.ForeignKey(dMotivosDePerda, on_delete=models.DO_NOTHING, db_column='motivo_perda_id')
    midia_id = models.ForeignKey(dMidias, on_delete=models.DO_NOTHING, db_column='midia_id')
    corretor_id = models.ForeignKey(dCorretores, on_delete=models.DO_NOTHING, db_column='corretor_id')
    utm_id = models.ForeignKey(dUTMs, on_delete=models.DO_NOTHING, db_column='utm_id')
    
    def __str__(self):
        return f"lead_id: {self.lead_id} - id_kommo: {self.id_kommo} - data: {self.data}"

    class Meta:
        managed = False
        app_label='boulevarddosipes'
        db_table = 'fLeads'