from fastapi import APIRouter, Depends, Request, status
from sqlalchemy.orm import Session
from uuid import UUID
from utils.get_db import get_db
from schema.notification_schema import NotificationListResponse, NotificationResponse
from fastapi.security import HTTPBearer
from services.notification_service import (
    get_user_notifications,
    mark_notification_as_read,
    mark_all_as_read
)

security = HTTPBearer()
router = APIRouter(prefix="/notifications", tags=["Notifications"])

@router.get("", response_model=NotificationListResponse, dependencies=[Depends(security)])
def get_notifications(
    request: Request,
    limit: int = 50,
    db: Session = Depends(get_db)
):
    """
    Get all notifications for the authenticated user.
    """
    user = request.state.user
    return get_user_notifications(db=db, user_id=user.id, limit=limit)

@router.put("/{notification_id}/read", response_model=NotificationResponse, dependencies=[Depends(security)])
def read_notification(
    notification_id: UUID,
    request: Request,
    db: Session = Depends(get_db)
):
    """
    Mark a specific notification as read.
    """
    user = request.state.user
    return mark_notification_as_read(db=db, notification_id=notification_id, user_id=user.id)

@router.put("/read-all", status_code=status.HTTP_200_OK, dependencies=[Depends(security)])
def read_all_notifications(
    request: Request,
    db: Session = Depends(get_db)
):
    """
    Mark all notifications for the authenticated user as read.
    """
    user = request.state.user
    return mark_all_as_read(db=db, user_id=user.id)
