"""Contact / message endpoints.""" from __future__ import annotations from typing import Optional from fastapi import APIRouter, Depends, Query from app.middleware.auth import get_current_user from app.schemas.message import ( MessageCreate, MessageListResponse, MessageMarkRead, MessageResponse, ) from app.services.agency_service import AgencyService from app.services.message_service import MessageService router = APIRouter(prefix="/messages", tags=["Messages"]) @router.post("/", response_model=MessageResponse, status_code=201) def send_message(body: MessageCreate): """Public endpoint — anyone can send a message about a listing.""" svc = MessageService() return svc.send_message(body.model_dump()) @router.get("/", response_model=MessageListResponse) def list_messages( read: Optional[bool] = None, page: int = Query(1, ge=1), page_size: int = Query(20, ge=1, le=100), user: dict = Depends(get_current_user), ): """List messages for the current user's agency.""" agency_svc = AgencyService() agency = agency_svc.get_agency_by_user(user["id"]) svc = MessageService() return svc.list_messages( agency_id=agency["id"], user_id=user["id"], user_role=user["role"], read_filter=read, page=page, page_size=page_size, ) @router.get("/unread-count") def unread_count(user: dict = Depends(get_current_user)): agency_svc = AgencyService() agency = agency_svc.get_agency_by_user(user["id"]) svc = MessageService() count = svc.get_unread_count(agency["id"]) return {"unread_count": count} @router.patch("/{message_id}/read", response_model=MessageResponse) def mark_message_read( message_id: str, body: MessageMarkRead, user: dict = Depends(get_current_user), ): svc = MessageService() return svc.mark_read(message_id, user["id"], user["role"], body.read) @router.delete("/{message_id}") def delete_message(message_id: str, user: dict = Depends(get_current_user)): svc = MessageService() return svc.delete_message(message_id, user["id"], user["role"])