from datetime import datetime

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

from database import Base


class Aktivitaet(Base):
    __tablename__ = "aktivitaet"

    id = Column(Integer, primary_key=True, autoincrement=True)
    cobra_id = Column(String(50), unique=True, nullable=True)
    kontakt_id = Column(Integer, ForeignKey("kontakt.id", ondelete="CASCADE"), nullable=True)
    veranstaltung_id = Column(Integer, ForeignKey("veranstaltung.id", ondelete="SET NULL"), nullable=True)
    kampagne_id = Column(Integer, ForeignKey("kampagne.id", ondelete="SET NULL"), nullable=True)

    art = Column(String(50), nullable=False)  # email_aus, telefon, persoenlich, ...
    betreff = Column(String(500))
    bemerkung = Column(Text)
    status = Column(String(50), default="information")  # offen, erledigt, information
    datum = Column(DateTime)
    faellig_am = Column(DateTime)
    projekt = Column(String(200))
    zugewiesen_an = Column(String(10))  # Kürzel des zugewiesenen Mitarbeiters

    erfasst_am = Column(DateTime, default=datetime.now)
    erfasst_von = Column(String(10))
    aktualisiert_am = Column(DateTime, default=datetime.now, onupdate=datetime.now)
    aktualisiert_von = Column(String(10))

    kontakt = relationship("Kontakt", back_populates="aktivitaeten")
    veranstaltung = relationship("Veranstaltung", back_populates="aktivitaeten")
    kampagne = relationship("Kampagne", back_populates="aktivitaeten")
    dokumente = relationship("Dokument", back_populates="aktivitaet", cascade="all, delete-orphan")

    ART_LABELS = {
        "email_aus": "E-Mail ausgehend",
        "email_ein": "E-Mail eingehend",
        "telefon": "Telefonat",
        "persoenlich": "Persönliches Gespräch",
        "serienbrief": "Serienbrief",
        "schriftverkehr": "Schriftverkehr",
        "aufgabe": "Aufgabe",
        "bewerbung": "Bewerbung",
        "brief_ein": "Brief eingehend",
        "fax_aus": "Fax ausgehend",
        "notiz": "Notiz",
        "sonstiges": "Sonstiges",
    }

    ART_ICONS = {
        "email_aus": "📤",
        "email_ein": "📥",
        "telefon": "📞",
        "persoenlich": "🤝",
        "serienbrief": "📨",
        "schriftverkehr": "✉️",
        "aufgabe": "✅",
        "bewerbung": "📋",
        "brief_ein": "📬",
        "fax_aus": "📠",
        "notiz": "📝",
        "sonstiges": "📌",
    }

    @property
    def art_label(self):
        return self.ART_LABELS.get(self.art, self.art)

    @property
    def art_icon(self):
        return self.ART_ICONS.get(self.art, "📌")
