from datetime import date

from sqlalchemy import Date, ForeignKey, Integer, String, Text
from sqlalchemy.orm import Mapped, mapped_column, relationship

from app.db.base import Base, TimestampMixin
from app.db.types import str_enum
from app.models.enums import WhatsAppLogStatus, WhatsAppSendMode


class WhatsAppLog(Base, TimestampMixin):
    __tablename__ = "whatsapp_logs"

    id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
    policy_id: Mapped[int] = mapped_column(ForeignKey("policies.id"), nullable=False, index=True)
    customer_id: Mapped[int] = mapped_column(ForeignKey("customers.id"), nullable=False, index=True)
    agency_id: Mapped[int] = mapped_column(ForeignKey("agencies.id"), nullable=False, index=True)
    sent_by: Mapped[int | None] = mapped_column(ForeignKey("users.id"))
    mobile: Mapped[str] = mapped_column(String(20), nullable=False)
    message: Mapped[str] = mapped_column(Text, nullable=False)
    send_mode: Mapped[WhatsAppSendMode] = mapped_column(str_enum(WhatsAppSendMode), default=WhatsAppSendMode.MANUAL)
    status: Mapped[WhatsAppLogStatus] = mapped_column(str_enum(WhatsAppLogStatus), default=WhatsAppLogStatus.SENT)
    whatsapp_url: Mapped[str | None] = mapped_column(String(1000))
    reminder_offset_days: Mapped[int | None] = mapped_column(Integer)
    external_message_id: Mapped[str | None] = mapped_column(String(100), index=True)
    template_name: Mapped[str | None] = mapped_column(String(100))
    failure_reason: Mapped[str | None] = mapped_column(Text)

    policy: Mapped["Policy"] = relationship(back_populates="whatsapp_logs")


from app.models.policy import Policy  # noqa: E402
