using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using SpotifyAPI.Web.Models;
namespace SpotifyAPI.Web
{
public interface IClient : IDisposable
{
JsonSerializerSettings JsonSettings { get; set; }
///
/// Downloads data from an URL and returns it
///
/// An URL
///
Tuple Download(string url, Dictionary headers = null);
///
/// Downloads data async from an URL and returns it
///
///
///
Task> DownloadAsync(string url, Dictionary headers = null);
///
/// Downloads data from an URL and returns it
///
/// An URL
///
Tuple DownloadRaw(string url, Dictionary headers = null);
///
/// Downloads data async from an URL and returns it
///
///
///
Task> DownloadRawAsync(string url, Dictionary headers = null);
///
/// Downloads data from an URL and converts it to an object
///
/// The Type which the object gets converted to
/// An URL
///
Tuple DownloadJson(string url, Dictionary headers = null);
///
/// Downloads data async from an URL and converts it to an object
///
/// The Type which the object gets converted to
/// An URL
///
Task> DownloadJsonAsync(string url, Dictionary headers = null);
///
/// Uploads data from an URL and returns the response
///
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Tuple Upload(string url, string body, string method, Dictionary headers = null);
///
/// Uploads data async from an URL and returns the response
///
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Task> UploadAsync(string url, string body, string method, Dictionary headers = null);
///
/// Uploads data from an URL and returns the response
///
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Tuple UploadRaw(string url, string body, string method, Dictionary headers = null);
///
/// Uploads data async from an URL and returns the response
///
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Task> UploadRawAsync(string url, string body, string method, Dictionary headers = null);
///
/// Uploads data from an URL and converts the response to an object
///
/// The Type which the object gets converted to
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Tuple UploadJson(string url, string body, string method, Dictionary headers = null);
///
/// Uploads data async from an URL and converts the response to an object
///
/// The Type which the object gets converted to
/// An URL
/// The Body-Data (most likely a JSON String)
/// The Upload-method (POST,DELETE,PUT)
///
Task> UploadJsonAsync(string url, string body, string method, Dictionary headers = null);
}
}