# services/alert_processor/app/models/alerts.py
"""
Alert models for the alert processor service
"""

from sqlalchemy import Column, String, Text, DateTime, JSON, Enum
from sqlalchemy.dialects.postgresql import UUID
from datetime import datetime
import uuid
import enum

from shared.database.base import Base


class AlertStatus(enum.Enum):
    """Alert status values"""
    ACTIVE = "active"
    RESOLVED = "resolved"
    ACKNOWLEDGED = "acknowledged"
    IGNORED = "ignored"


class AlertSeverity(enum.Enum):
    """Alert severity levels"""
    LOW = "low"
    MEDIUM = "medium"
    HIGH = "high"
    URGENT = "urgent"


class Alert(Base):
    """Alert records for the alert processor service"""
    __tablename__ = "alerts"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    tenant_id = Column(UUID(as_uuid=True), nullable=False, index=True)

    # Alert classification
    item_type = Column(String(50), nullable=False)  # 'alert' or 'recommendation'
    alert_type = Column(String(100), nullable=False)  # e.g., 'overstock_warning'
    severity = Column(Enum(AlertSeverity, values_callable=lambda obj: [e.value for e in obj]), nullable=False, index=True)
    status = Column(Enum(AlertStatus, values_callable=lambda obj: [e.value for e in obj]), default=AlertStatus.ACTIVE, index=True)

    # Source and content
    service = Column(String(100), nullable=False)  # originating service
    title = Column(String(255), nullable=False)
    message = Column(Text, nullable=False)

    # Actions and metadata
    actions = Column(JSON, nullable=True)  # List of available actions
    alert_metadata = Column(JSON, nullable=True)  # Additional alert-specific data

    # Timestamps
    created_at = Column(DateTime, default=datetime.utcnow, index=True)
    updated_at = Column(DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
    resolved_at = Column(DateTime, nullable=True)