from django.db import models
from polymorphic.models import PolymorphicModel

# --------------- FINE PREFISSO TEMPLATE ---------------


class Progetto(models.Model):
    class Meta:
        verbose_name = 'progetto'
        verbose_name_plural = 'progetto'

    def __str__(self):
        return f"Progetto (id: {self.id})"

    progetto_padre = models.ForeignKey('Progetto', on_delete=models.CASCADE,
                                       null=True, blank=True, related_name="Progetto_da_Progetto_progetto_padre")
    stato = models.IntegerField(null=True, blank=True)
    nome = models.CharField(null=True, max_length=4096)
    descrizione = models.TextField(null=True)


class ValorizzazioneEconomicaProgetto(models.Model):
    class Meta:
        verbose_name = 'valorizzazioneeconomicaprogetto'
        verbose_name_plural = 'valorizzazioneeconomicaprogetto'

    def __str__(self):
        return f"ValorizzazioneEconomicaProgetto (id: {self.id})"

    progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="ValorizzazioneEconomicaProgetto_da_Progetto_progetto")
    dato_economico = models.ForeignKey('offerte_app.AtomoFatturabile', on_delete=models.CASCADE, null=True,
                                       blank=True, related_name="ValorizzazioneEconomicaProgetto_da_DettaglioFatturabile_dato_economico")
    fase_target = models.IntegerField(null=True, blank=True)


class Repository(models.Model):
    class Meta:
        verbose_name = 'repository'
        verbose_name_plural = 'repository'

    def __str__(self):
        return f"Repository (id: {self.id})"

    url = models.CharField(null=True, max_length=1024)
    descrizione = models.CharField(null=True, max_length=4096)


class TipoRelazione(models.Model):
    class Meta:
        verbose_name = 'tiporelazione'
        verbose_name_plural = 'tiporelazione'

    def __str__(self):
        return f"TipoRelazione (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class Attivita(models.Model):
    class Meta:
        verbose_name = 'attivita'
        verbose_name_plural = 'attivita'

    def __str__(self):
        return f"Attivita (id: {self.id})"

    attivita_generica = models.ForeignKey('Attivita', on_delete=models.CASCADE,
                                          null=True, blank=True, related_name="Attivita_da_Attivita_attivita_generica")
    tipo = models.ForeignKey('TipoAttivita', on_delete=models.CASCADE,
                             null=True, blank=True, related_name="Attivita_da_TipoAttivita_tipo")
    descrizione = models.CharField(null=True, max_length=4096)


class RisorsaChiave(models.Model):
    class Meta:
        verbose_name = 'risorsachiave'
        verbose_name_plural = 'risorsachiave'

    def __str__(self):
        return f"RisorsaChiave (id: {self.id})"

    risorsa_generica = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
                                         blank=True, related_name="RisorsaChiave_da_RisorsaChiave_risorsa_generica")
    descrizione = models.CharField(null=True, max_length=4096)


class PropostaDiValore(models.Model):
    class Meta:
        verbose_name = 'propostadivalore'
        verbose_name_plural = 'propostadivalore'

    def __str__(self):
        return f"PropostaDiValore (id: {self.id})"

    proposta_valore_generica = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
                                                 blank=True, related_name="PropostaDiValore_da_PropostaDiValore_proposta_valore_generica")
    descrizione = models.CharField(null=True, max_length=4096)


class CanaleDiDistribuzione(models.Model):
    class Meta:
        verbose_name = 'canaledidistribuzione'
        verbose_name_plural = 'canaledidistribuzione'

    def __str__(self):
        return f"CanaleDiDistribuzione (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class SettoreDiMercato(models.Model):
    class Meta:
        verbose_name = 'settoredimercato'
        verbose_name_plural = 'settoredimercato'

    def __str__(self):
        return f"SettoreDiMercato (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class FlussoDiRicavi(models.Model):
    class Meta:
        verbose_name = 'flussodiricavi'
        verbose_name_plural = 'flussodiricavi'

    def __str__(self):
        return f"FlussoDiRicavi (id: {self.id})"

    flusso_ricavi_generico = models.ForeignKey('FlussoDiRicavi', on_delete=models.CASCADE, null=True,
                                               blank=True, related_name="FlussoDiRicavi_da_FlussoDiRicavi_flusso_ricavi_generico")
    descrizione = models.CharField(null=True, max_length=4096)


class StrutturaDeiCosti(models.Model):
    class Meta:
        verbose_name = 'strutturadeicosti'
        verbose_name_plural = 'strutturadeicosti'

    def __str__(self):
        return f"StrutturaDeiCosti (id: {self.id})"


class SettoreAzienda(models.Model):
    class Meta:
        verbose_name = 'settoreazienda'
        verbose_name_plural = 'settoreazienda'

    def __str__(self):
        return f"SettoreAzienda (id: {self.id})"

    settore_generico = models.ForeignKey('SettoreAzienda', on_delete=models.CASCADE, null=True,
                                         blank=True, related_name="SettoreAzienda_da_SettoreAzienda_settore_generico")
    azienda = models.ForeignKey('fattura_elettronica_app.SoggettoFiscale', on_delete=models.CASCADE, null=True,
                                blank=True, related_name="SettoreAzienda_da_SoggettoFiscale_azienda")
    settore_di_mercato = models.ForeignKey('SettoreDiMercato', on_delete=models.CASCADE, null=True,
                                           blank=True, related_name="SettoreAzienda_da_SettoreDiMercato_settore_di_mercato")


class RelazioneConAzienda(models.Model):
    class Meta:
        verbose_name = 'relazioneconazienda'
        verbose_name_plural = 'relazioneconazienda'

    def __str__(self):
        return f"RelazioneConAzienda (id: {self.id})"

    relazione_generica = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
                                           blank=True, related_name="RelazioneConAzienda_da_RelazioneConAzienda_relazione_generica")
    azienda = models.ForeignKey('fattura_elettronica_app.SoggettoFiscale', on_delete=models.CASCADE, null=True,
                                blank=True, related_name="RelazioneConAzienda_da_SoggettoFiscale_azienda")
    tipo_relazione = models.ForeignKey('TipoRelazione', on_delete=models.CASCADE, null=True,
                                       blank=True, related_name="RelazioneConAzienda_da_TipoRelazione_tipo_relazione")


class TipoAttivita(models.Model):
    class Meta:
        verbose_name = 'tipoattivita'
        verbose_name_plural = 'tipoattivita'

    def __str__(self):
        return f"TipoAttivita (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class ValoreDelProgetto(models.Model):
    class Meta:
        verbose_name = 'valoredelprogetto'
        verbose_name_plural = 'valoredelprogetto'

    def __str__(self):
        return f"ValoreDelProgetto (id: {self.id})"

    progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="ValoreDelProgetto_da_Progetto_progetto")
    proposta_di_valore = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
                                           blank=True, related_name="ValoreDelProgetto_da_PropostaDiValore_proposta_di_valore")


class AttivitaDelProgetto(models.Model):
    class Meta:
        verbose_name = 'attivitadelprogetto'
        verbose_name_plural = 'attivitadelprogetto'

    def __str__(self):
        return f"AttivitaDelProgetto (id: {self.id})"

    progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="AttivitaDelProgetto_da_Progetto_progetto")
    attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="AttivitaDelProgetto_da_Attivita_attivita")


class AssetDelProgetto(models.Model):
    class Meta:
        verbose_name = 'assetdelprogetto'
        verbose_name_plural = 'assetdelprogetto'

    def __str__(self):
        return f"AssetDelProgetto (id: {self.id})"

    progetto = models.ForeignKey('Progetto', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="AssetDelProgetto_da_Progetto_progetto")
    asset = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
                              blank=True, related_name="AssetDelProgetto_da_RisorsaChiave_asset")


class RisorsaPersonale(models.Model):
    class Meta:
        verbose_name = 'risorsapersonale'
        verbose_name_plural = 'risorsapersonale'

    def __str__(self):
        return f"RisorsaPersonale (id: {self.id})"

    persona = models.IntegerField(null=True, blank=True)


class RisorsaFisica(models.Model):
    class Meta:
        verbose_name = 'risorsafisica'
        verbose_name_plural = 'risorsafisica'

    def __str__(self):
        return f"RisorsaFisica (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class RisorsaFinanziaria(models.Model):
    class Meta:
        verbose_name = 'risorsafinanziaria'
        verbose_name_plural = 'risorsafinanziaria'

    def __str__(self):
        return f"RisorsaFinanziaria (id: {self.id})"

    descrizione = models.CharField(null=True, max_length=4096)


class ValoreDellAttivita(models.Model):
    class Meta:
        verbose_name = 'valoredellattivita'
        verbose_name_plural = 'valoredellattivita'

    def __str__(self):
        return f"ValoreDellAttivita (id: {self.id})"

    attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="ValoreDellAttivita_da_Attivita_attivita")
    proposta_di_valore = models.ForeignKey('PropostaDiValore', on_delete=models.CASCADE, null=True,
                                           blank=True, related_name="ValoreDellAttivita_da_PropostaDiValore_proposta_di_valore")


class ValorizzazioneEconomicaAttivita(models.Model):
    class Meta:
        verbose_name = 'valorizzazioneeconomicaattivita'
        verbose_name_plural = 'valorizzazioneeconomicaattivita'

    def __str__(self):
        return f"ValorizzazioneEconomicaAttivita (id: {self.id})"

    attivita_del_progetto = models.ForeignKey('AttivitaDelProgetto', on_delete=models.CASCADE, null=True,
                                              blank=True, related_name="ValorizzazioneEconomicaAttivita_da_AttivitaDelProgetto_attivita_del_progetto")
    dato_economico = models.ForeignKey('offerte_app.AtomoFatturabile', on_delete=models.CASCADE, null=True,
                                       blank=True, related_name="ValorizzazioneEconomicaAttivita_da_DettaglioFatturabile_dato_economico")


class AssetDaAttivita(models.Model):
    class Meta:
        verbose_name = 'assetdaattivita'
        verbose_name_plural = 'assetdaattivita'

    def __str__(self):
        return f"AssetDaAttivita (id: {self.id})"

    attivita = models.ForeignKey('Attivita', on_delete=models.CASCADE, null=True,
                                 blank=True, related_name="AssetDaAttivita_da_Attivita_attivita")
    asset = models.ForeignKey('RisorsaChiave', on_delete=models.CASCADE, null=True,
                              blank=True, related_name="AssetDaAttivita_da_RisorsaChiave_asset")


class ArchivioFiles(models.Model):
    class Meta:
        verbose_name = 'archiviofiles'
        verbose_name_plural = 'archiviofiles'

    def __str__(self):
        return f"ArchivioFiles (id: {self.id})"

    url = models.CharField(null=True, max_length=1024)
    descrizione = models.CharField(null=True, max_length=4096)


class CanaleDistribuzioneIndiretto(models.Model):
    class Meta:
        verbose_name = 'canaledistribuzioneindiretto'
        verbose_name_plural = 'canaledistribuzioneindiretto'

    def __str__(self):
        return f"CanaleDistribuzioneIndiretto (id: {self.id})"

    partnership_distribuzione = models.ForeignKey('RelazioneConAzienda', on_delete=models.CASCADE, null=True,
                                                  blank=True, related_name="CanaleDistribuzioneIndiretto_da_RelazioneConAzienda_partnership_distribuzione")
