{"version":3,"sources":["../src/types/chat.ts"],"sourcesContent":["/**\n * Chat types for real-time messaging functionality\n */\n\n/**\n * User profile role enumerations\n * Defines all available user roles in the system with hierarchy levels\n * Matches backend PROFILE_ROLES enum\n */\nexport enum PROFILE_ROLES {\n  SUPER_ADMIN = 'SUPER_ADMIN',\n  GENERAL_MANAGER = 'GENERAL_MANAGER',\n  REGIONAL_MANAGER = 'REGIONAL_MANAGER',\n  UNIT_MANAGER = 'UNIT_MANAGER',\n  TEACHER = 'TEACHER',\n  STUDENT = 'STUDENT',\n}\n\n/**\n * Message types enum\n */\nexport const CHAT_MESSAGE_TYPES = {\n  TEXT: 'text',\n  SYSTEM: 'system',\n} as const;\n\nexport type ChatMessageType =\n  (typeof CHAT_MESSAGE_TYPES)[keyof typeof CHAT_MESSAGE_TYPES];\n\n/**\n * User available for chat selection\n */\nexport interface ChatUser {\n  userInstitutionId: string;\n  name: string;\n  photo: string | null;\n  profileName: string;\n}\n\n/**\n * Available users grouped by role\n */\nexport interface AvailableUsers {\n  users: ChatUser[];\n}\n\n/**\n * Chat room basic info\n */\nexport interface ChatRoom {\n  id: string;\n  name: string;\n  classId: string;\n  createdById: string;\n  active: boolean;\n  createdAt: Date | string;\n  updatedAt: Date | string;\n}\n\n/**\n * Chat room with last message and participant count\n */\nexport interface ChatRoomWithDetails extends ChatRoom {\n  lastMessage: ChatMessage | null;\n  participantCount: number;\n}\n\n/**\n * Chat message\n */\nexport interface ChatMessage {\n  id: string;\n  senderId: string;\n  senderName: string;\n  senderPhoto: string | null;\n  senderRole: string;\n  content: string;\n  messageType: ChatMessageType;\n  createdAt: Date | string;\n}\n\n/**\n * Chat participant\n */\nexport interface ChatParticipant {\n  userInstitutionId: string;\n  name: string;\n  photo: string | null;\n  role: string;\n  isOnline: boolean;\n}\n\n/**\n * WebSocket user info\n */\nexport interface WSUserInfo {\n  userInstitutionId: string;\n  name: string;\n  photo: string | null;\n  role: string;\n}\n\n/**\n * WebSocket message types - Client to Server\n */\nexport type WSClientMessageType = 'message' | 'leave';\n\n/**\n * WebSocket message types - Server to Client\n */\nexport type WSServerMessageType =\n  | 'user_joined'\n  | 'user_left'\n  | 'new_message'\n  | 'participants'\n  | 'history'\n  | 'error';\n\n/**\n * WebSocket client message\n */\nexport interface WSClientMessage {\n  type: WSClientMessageType;\n  payload?: {\n    content?: string;\n  };\n}\n\n/**\n * WebSocket server message\n */\nexport interface WSServerMessage {\n  type: WSServerMessageType;\n  payload: {\n    user?: WSUserInfo;\n    message?: ChatMessage;\n    messages?: ChatMessage[];\n    participants?: ChatParticipant[];\n    message_text?: string;\n  };\n}\n\n/**\n * Chat API client interface\n */\nexport interface ChatApiClient {\n  get: <T>(url: string) => Promise<{ data: T }>;\n  post: <T>(url: string, data?: unknown) => Promise<{ data: T }>;\n}\n\n/**\n * API response types\n */\nexport interface AvailableUsersResponse {\n  users: ChatUser[];\n}\n\nexport interface CreateRoomResponse {\n  room: ChatRoom;\n  participants: Array<{\n    id: string;\n    roomId: string;\n    userInstitutionId: string;\n    isOnline: boolean;\n    lastSeenAt: Date | string | null;\n    joinedAt: Date | string;\n  }>;\n}\n\nexport interface GetRoomsResponse {\n  rooms: ChatRoomWithDetails[];\n}\n\nexport interface GetRoomDetailsResponse {\n  room: ChatRoom;\n  participants: Array<{\n    userInstitutionId: string;\n    userName: string;\n    userPhoto: string | null;\n    userRole: string;\n    isOnline: boolean;\n    lastSeenAt: Date | string | null;\n  }>;\n  messages: ChatMessage[];\n}\n"],"mappings":";AASO,IAAK,gBAAL,kBAAKA,mBAAL;AACL,EAAAA,eAAA,iBAAc;AACd,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,sBAAmB;AACnB,EAAAA,eAAA,kBAAe;AACf,EAAAA,eAAA,aAAU;AACV,EAAAA,eAAA,aAAU;AANA,SAAAA;AAAA,GAAA;AAYL,IAAM,qBAAqB;AAAA,EAChC,MAAM;AAAA,EACN,QAAQ;AACV;","names":["PROFILE_ROLES"]}