"""OSINT enrichment items — CVEs, blogs, PoCs, and advisories linked to techniques."""

import uuid
from sqlalchemy import Column, String, Text, Boolean, DateTime, ForeignKey, func
from sqlalchemy.dialects.postgresql import UUID, JSONB
from sqlalchemy.orm import relationship

from app.database import Base


class OsintItem(Base):
    """Represents an OSINT data point (CVE, blog, PoC, advisory) associated
    with a MITRE ATT&CK technique.

    Used by the enrichment pipeline to surface relevant threat intelligence
    for each technique, flagging those that need review.
    """

    __tablename__ = "osint_items"

    id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
    technique_id = Column(
        UUID(as_uuid=True),
        ForeignKey("techniques.id"),
        nullable=False,
        index=True,
    )
    source_type = Column(String(50), nullable=False)  # "cve", "blog", "poc", "advisory"
    source_url = Column(Text, nullable=False)
    title = Column(String(500), nullable=False)
    description = Column(Text, nullable=True)
    severity = Column(String(20), nullable=True)  # CRITICAL, HIGH, MEDIUM, LOW, UNKNOWN
    discovered_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
    reviewed = Column(Boolean, default=False)
    metadata_ = Column("metadata", JSONB, default={})

    # ── Relationships ─────────────────────────────────────────────────
    technique = relationship("Technique", backref="osint_items")
