using Microsoft.AspNetCore.Mvc;
using QtCNETAPI.Dtos.User;
using QtCNETAPI.Dtos.Room;
using QtCNETAPI.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace QtCNETAPI.Services.ApiService
{
    public interface IApiService
    {
        public string? SessionToken { get; set; }
        public User CurrentUser { get; }

        public Task<ServiceResponse<string>> PingServerAsync();
        public Task<ServiceResponse<List<UserInformationDto>>> GetOnlineUsersAsync();
        public Task<ServiceResponse<User>> LoginAsync(UserLoginDto userLoginDto);
        public Task<ServiceResponse<User>> RefreshLogin(string refreshToken);
        public Task<ServiceResponse<string>> RefreshSessionIfInvalid();
        public Task<ServiceResponse<User>> RegisterAsync(UserDto userDto);
        public Task<ServiceResponse<UserInformationDto>> GetUserInformationAsync(string id);
        public Task<ServiceResponse<UserInformationDto>> UpdateUserInformationAsync(UserUpdateInformationDto request);
        public Task<ServiceResponse<string>> UpdateUserProfilePic(string filePath);
        public Task<ServiceResponse<byte[]>> GetUserProfilePic(string userId);
        public Task<ServiceResponse<Room>> CreateRoomAsync(RoomDto request);
        public Task<ServiceResponse<Room>> DeleteRoomAsync(string roomId);
        public Task<ServiceResponse<List<Room>>> GetAllRoomsAsync();
        public Task<ServiceResponse<List<Contact>>> GetCurrentUserContacts();
        public Task<ServiceResponse<Contact>> AddContactToCurrentUser(string userId);
        public Task<ServiceResponse<bool>> AcceptContactRequest(string userId);
        public Task<ServiceResponse<Contact>> RemoveContactFromCurrentUser(string userId);
        public Task<ServiceResponse<int>> AddCurrencyToCurrentUser(int amount, bool isSpinClaim);
    }
}
