from typing import List, Optional import strawberry from strawberry.relay import GlobalID @strawberry.input class ConversationInput: """Input for creating a new conversation""" subject: str conversation_type: str # DIRECT, GROUP, SUPPORT participant_ids: List[GlobalID] # List of TeamProfile or CustomerProfile IDs entity_type: Optional[str] = None # e.g., "Project", "Service", "Account" entity_id: Optional[GlobalID] = None # UUID of the entity metadata: Optional[str] = None # JSON string @strawberry.input class ConversationUpdateInput: """Input for updating a conversation""" id: GlobalID subject: Optional[str] = None is_archived: Optional[bool] = None metadata: Optional[str] = None @strawberry.input class MessageInput: """Input for sending a new message""" conversation_id: GlobalID body: str reply_to_id: Optional[GlobalID] = None # For threading attachments: Optional[str] = None # JSON string with attachment metadata metadata: Optional[str] = None # JSON string @strawberry.input class MessageUpdateInput: """Input for updating a message (limited fields)""" id: GlobalID body: str attachments: Optional[str] = None # JSON string with attachment metadata @strawberry.input class AddParticipantInput: """Input for adding a participant to a conversation""" conversation_id: GlobalID participant_id: GlobalID # TeamProfile or CustomerProfile ID @strawberry.input class RemoveParticipantInput: """Input for removing a participant from a conversation""" conversation_id: GlobalID participant_id: GlobalID @strawberry.input class MarkAsReadInput: """Input for marking messages as read""" conversation_id: GlobalID @strawberry.input class ArchiveConversationInput: """Input for archiving/unarchiving a conversation""" conversation_id: GlobalID is_archived: bool @strawberry.input class MuteConversationInput: """Input for muting/unmuting a conversation""" conversation_id: GlobalID is_muted: bool