from datetime import datetime

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

from database import Base


class Veranstaltung(Base):
    __tablename__ = "veranstaltung"

    id = Column(Integer, primary_key=True, autoincrement=True)
    titel = Column(String(300), nullable=False)
    beschreibung = Column(Text)
    ort = Column(String(200))
    start_datum = Column(DateTime)
    end_datum = Column(DateTime)
    typ = Column(String(50))  # workshop, vortrag, netzwerktreffen, ...
    status = Column(String(50), default="geplant")  # geplant, laufend, abgeschlossen, abgesagt
    max_teilnehmer = Column(Integer)
    projekt = Column(String(200))
    kampagne_id = Column(Integer, ForeignKey("kampagne.id", ondelete="SET NULL"), nullable=True)
    erfasst_am = Column(DateTime, default=datetime.now)
    erfasst_von = Column(String(10))

    teilnehmer = relationship("Teilnehmer", back_populates="veranstaltung", cascade="all, delete-orphan")
    dokumente = relationship("Dokument", back_populates="veranstaltung", cascade="all, delete-orphan")
    aktivitaeten = relationship("Aktivitaet", back_populates="veranstaltung")
    kampagne = relationship("Kampagne", back_populates="veranstaltungen")


class Teilnehmer(Base):
    __tablename__ = "teilnehmer"

    id = Column(Integer, primary_key=True, autoincrement=True)
    veranstaltung_id = Column(Integer, ForeignKey("veranstaltung.id", ondelete="CASCADE"), nullable=False)
    kontakt_id = Column(Integer, ForeignKey("kontakt.id", ondelete="CASCADE"), nullable=False)
    rolle = Column(String(50), default="teilnehmer")  # teilnehmer, referent, organisator
    status = Column(String(50), default="angemeldet")  # angemeldet, teilgenommen, abgesagt

    veranstaltung = relationship("Veranstaltung", back_populates="teilnehmer")
    kontakt = relationship("Kontakt", back_populates="teilnahmen")
