import uuid
from datetime import datetime, timezone
from sqlalchemy import Column, String, Boolean, DateTime, Text, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from app.core.database import Base


def now_utc():
    return datetime.now(timezone.utc)


class Notification(Base):
    """
    Stores system and business event notifications for both internal staff
    and external portal users (dealers).
    """
    __tablename__ = 'notifications'

    notification_id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)

    # Recipient targeting
    recipient_type = Column(String(20), nullable=False, default='STAFF')  # 'STAFF' or 'DEALER'
    user_id = Column(UUID(as_uuid=True), ForeignKey('login_users.user_id', ondelete='CASCADE'), nullable=True, index=True)
    dealer_id = Column(String(50), ForeignKey('customer_master.customer_id', ondelete='CASCADE'), nullable=True, index=True)

    # Classification & Content
    category = Column(String(50), nullable=False, default='ORDER')  # 'ORDER', 'PRODUCTION', 'QA', etc.
    event_type = Column(String(50), nullable=False)                 # 'ORDER_CREATED', 'ORDER_CONFIRMED', etc.
    title = Column(String(255), nullable=False)
    message = Column(Text, nullable=False)

    # Navigation / Deep Link
    reference_type = Column(String(50), nullable=True)              # 'DEALER_ORDER'
    reference_id = Column(String(100), nullable=True)               # e.g. order_id string
    action_url = Column(String(255), nullable=True)                 # e.g. '/sales/dealer-orders' or '/dealer-portal/orders'

    # Status
    is_read = Column(Boolean, nullable=False, default=False, index=True)
    read_at = Column(DateTime(timezone=True), nullable=True)
    created_at = Column(DateTime(timezone=True), default=now_utc, index=True)
