from app import db


class Entreprise(db.Model):
    __tablename__ = "entreprises"
    id = db.Column(db.Integer, primary_key=True)
    siret = db.Column(db.Text)
    nom = db.Column(db.Text)
    adresse = db.Column(db.Text)
    codepostal = db.Column(db.Text)
    ville = db.Column(db.Text)
    pays = db.Column(db.Text)
    contacts = db.relationship(
        "EntrepriseContact",
        backref="entreprise",
        lazy="dynamic",
        cascade="all, delete-orphan",
    )
    offres = db.relationship(
        "EntrepriseOffre",
        backref="entreprise",
        lazy="dynamic",
        cascade="all, delete-orphan",
    )

    def to_dict(self):
        return {
            "siret": self.siret,
            "nom": self.nom,
            "adresse": self.adresse,
            "codepostal": self.codepostal,
            "ville": self.ville,
            "pays": self.pays,
        }


class EntrepriseContact(db.Model):
    __tablename__ = "entreprise_contact"
    id = db.Column(db.Integer, primary_key=True)
    entreprise_id = db.Column(
        db.Integer, db.ForeignKey("entreprises.id", ondelete="cascade")
    )
    nom = db.Column(db.Text)
    prenom = db.Column(db.Text)
    telephone = db.Column(db.Text)
    mail = db.Column(db.Text)
    poste = db.Column(db.Text)
    service = db.Column(db.Text)

    def to_dict(self):
        return {
            "nom": self.nom,
            "prenom": self.prenom,
            "telephone": self.telephone,
            "mail": self.mail,
            "poste": self.poste,
            "service": self.service,
        }

    def to_dict_export(self):
        entreprise = Entreprise.query.get(self.entreprise_id)
        return {
            "nom": self.nom,
            "prenom": self.prenom,
            "telephone": self.telephone,
            "mail": self.mail,
            "poste": self.poste,
            "service": self.service,
            "siret": entreprise.siret,
            "nom_entreprise": entreprise.nom,
            "adresse_entreprise": entreprise.adresse,
            "codepostal": entreprise.codepostal,
            "ville": entreprise.ville,
            "pays": entreprise.pays,
        }


class EntrepriseOffre(db.Model):
    __tablename__ = "entreprise_offre"
    id = db.Column(db.Integer, primary_key=True)
    entreprise_id = db.Column(
        db.Integer, db.ForeignKey("entreprises.id", ondelete="cascade")
    )
    date_ajout = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
    intitule = db.Column(db.Text)
    description = db.Column(db.Text)
    type_offre = db.Column(db.Text)
    missions = db.Column(db.Text)
    duree = db.Column(db.Text)

    def to_dict(self):
        return {
            "intitule": self.intitule,
            "description": self.description,
            "type_offre": self.type_offre,
            "missions": self.missions,
            "duree": self.duree,
        }


class EntrepriseLog(db.Model):
    __tablename__ = "entreprise_log"
    id = db.Column(db.Integer, primary_key=True)
    date = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
    authenticated_user = db.Column(db.Text)
    object = db.Column(db.Integer)
    text = db.Column(db.Text)


class EntrepriseEtudiant(db.Model):
    __tablename__ = "entreprise_etudiant"
    id = db.Column(db.Integer, primary_key=True)
    entreprise_id = db.Column(db.Integer, db.ForeignKey("entreprises.id"))
    etudid = db.Column(db.Integer)
    type_offre = db.Column(db.Text)
    date_debut = db.Column(db.Date)
    date_fin = db.Column(db.Date)
    formation_text = db.Column(db.Text)
    formation_scodoc = db.Column(db.Integer)


class EntrepriseEnvoiOffre(db.Model):
    __tablename__ = "entreprise_envoi_offre"
    id = db.Column(db.Integer, primary_key=True)
    sender_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    receiver_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    offre_id = db.Column(db.Integer, db.ForeignKey("entreprise_offre.id"))
    date_envoi = db.Column(db.DateTime(timezone=True), server_default=db.func.now())


class EntrepriseEnvoiOffreEtudiant(db.Model):
    __tablename__ = "entreprise_envoi_offre_etudiant"
    id = db.Column(db.Integer, primary_key=True)
    sender_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    receiver_id = db.Column(db.Integer, db.ForeignKey("identite.id"))
    offre_id = db.Column(db.Integer, db.ForeignKey("entreprise_offre.id"))
    date_envoi = db.Column(db.DateTime(timezone=True), server_default=db.func.now())
