package chats.data.remote.api import chats.data.remote.dto.ChatDto import chats.data.remote.dto.MessageDto import retrofit2.http.* data class SendMessageRequest( val content: String?, val type: String = "text", val attachments: List? = null, val replyToId: String? = null, val quote: String? = null ) data class AttachmentRequest( val type: String, val url: String, val fileName: String, val fileSize: Long ) interface ChatApi { @GET("chats") suspend fun getChats(): List @GET("messages/chat/{chatId}") suspend fun getMessages( @Path("chatId") chatId: String, @Query("cursor") cursor: String? = null, @Query("pivot") pivot: Long? = null, @Query("limit") limit: Int? = 50 ): List @POST("messages/chat/{chatId}") suspend fun sendMessage(@Path("chatId") chatId: String, @Body request: SendMessageRequest): MessageDto @Multipart @POST("messages/upload") suspend fun uploadFile(@Part file: okhttp3.MultipartBody.Part): FileUploadResponse // Klipy GIF API @GET("klipy/trending") suspend fun getTrendingGifs(@Query("page") page: Int): KlipyResponse @GET("klipy/search") suspend fun searchGifs(@Query("q") query: String, @Query("page") page: Int): KlipyResponse @GET("klipy/categories") suspend fun getGifCategories(): GifCategoriesResponse @POST("klipy/shared/{id}") suspend fun markGifShared(@Path("id") id: String, @Body query: String) @POST("messages/{messageId}/reactions") suspend fun addReaction(@Path("messageId") messageId: String, @Query("emoji") emoji: String) @POST("chats/personal") suspend fun createPersonalChat(@Body request: CreatePersonalChatRequest): ChatDto @POST("chats/{chatId}/typing") suspend fun sendTypingStatus(@Path("chatId") chatId: String) @POST("chats/{chatId}/read") suspend fun markMessagesAsRead(@Path("chatId") chatId: String, @Body lastMessageId: String) } data class CreatePersonalChatRequest( val userId: String ) data class KlipyResponse( val data: KlipyDataWrapper ) data class KlipyDataWrapper( val data: List ) data class KlipyGifDto( val id: String, val images: GifImagesDto? = null, val files: Map>? = null, val file: Map>? = null, val media_formats: Map? = null, val title: String? = null ) data class GifImagesDto( val fixed_height: GifImageSourceDto? = null, val original: GifImageSourceDto? = null, val fixed_height_small: GifImageSourceDto? = null ) data class GifImageSourceDto( val url: String ) data class GifCategoryDto( val category: String, val preview_url: String, val query: String ) data class FileUploadResponse( val url: String, val filename: String, val size: Long ) data class GifCategoriesResponse( val data: GifCategoriesData ) data class GifCategoriesData( val categories: List )