using System; using System.Collections.Generic; using System.Threading.Tasks; using Chtn.CSharp.SDK.Core; using Chtn.CSharp.SDK.Models.Chat; using Chtn.CSharp.SDK.Models.Common; using Chtn.CSharpSDK.Interfaces; using Newtonsoft.Json; namespace Chtn.CSharp.SDK.Services { public interface IChatsService { Task> Get(); List GetFast(); Task GetUserAvailability(GetAvailabilityReq req); Task ToggleMute(ToggleChatMuteReq req); Task StartNew(StartNewReq req); } public class ChatsService : IChatsService { private readonly ApiClient _apiClient; private readonly string _userId; private readonly IDatabaseAPI _database; public ChatsService(ApiClient apiClient, string userId, IDatabaseAPI database) { _apiClient = apiClient ?? throw new ArgumentNullException(nameof(apiClient)); _userId = userId; _database = database ?? throw new ArgumentNullException(nameof(database)); } public async Task> Get() { var body = new { userid = _userId }; var chats = await _apiClient.PostAsync>("chat/get", body); if (chats != null) { _database.Set("chats", JsonConvert.SerializeObject(chats), chats); } return chats; } public List GetFast() { var cachedData = _database.Get("chats", ""); if (string.IsNullOrEmpty(cachedData)) return new List(); return JsonConvert.DeserializeObject>(cachedData); } public async Task GetUserAvailability(GetAvailabilityReq req) => await _apiClient.PostAsync("chat/availability", req); public async Task ToggleMute(ToggleChatMuteReq req) => await _apiClient.PostAsync("v2/chat/toggleMute", req); public async Task StartNew(StartNewReq req) => await _apiClient.PostAsync("chat/startNew", req); } }