from datetime import datetime

from sqlalchemy import Boolean, Column, Date, DateTime, ForeignKey, Integer, String, Text
from sqlalchemy.orm import relationship

from database import Base


class Beziehung(Base):
    __tablename__ = "beziehung"

    id = Column(Integer, primary_key=True, autoincrement=True)
    kontakt_a_id = Column(Integer, ForeignKey("kontakt.id", ondelete="CASCADE"), nullable=False)
    kontakt_b_id = Column(Integer, ForeignKey("kontakt.id", ondelete="CASCADE"), nullable=False)
    typ = Column(String(50), nullable=False)  # mitarbeiter_von, vorstand_von, mitglied_von, ...
    rolle_a = Column(String(100))  # z.B. "Mitarbeiter"
    rolle_b = Column(String(100))  # z.B. "Arbeitgeber"
    beschreibung = Column(Text)
    start_datum = Column(Date)
    end_datum = Column(Date)
    ist_aktiv = Column(Boolean, default=True)
    erfasst_am = Column(DateTime, default=datetime.now)

    kontakt_a = relationship("Kontakt", foreign_keys=[kontakt_a_id], back_populates="beziehungen_a")
    kontakt_b = relationship("Kontakt", foreign_keys=[kontakt_b_id], back_populates="beziehungen_b")

    def partner_von(self, kontakt_id: int):
        """Gibt (Partner, Rolle-des-aktuellen-Kontakts) zurueck.
        Person ist immer kontakt_a, Org ist immer kontakt_b."""
        if self.kontakt_a_id == kontakt_id:
            return self.kontakt_b, self.rolle_a  # Wir=A(Person), zeige unsere Rolle
        return self.kontakt_a, self.rolle_a      # Wir=B(Org), zeige A(Person)'s Rolle
