from __future__ import annotations

from sqlalchemy.orm import Session

from ..models import Computer, Notification
from ..websocket.manager import hub


def notify(db: Session, type_: str, title: str, message: str | None = None, *, severity: str = "info",
           computer: Computer | None = None) -> Notification:
    n = Notification(type=type_, title=title[:160], message=(message or "")[:500], severity=severity,
                     computer_id=computer.id if computer else None, classroom_id=computer.classroom_id if computer else None)
    db.add(n)
    db.commit()
    hub.emit({"type": "notification", "data": {"id": n.id, "type": n.type, "title": n.title, "message": n.message,
                                               "severity": n.severity, "computer_id": n.computer_id,
                                               "created_at": n.created_at.isoformat()}},
             classroom_id=n.classroom_id)
    return n
