using AniAPI.NET.Filters; using AniAPI.NET.Helpers; using AniAPI.NET.Interfaces; using AniAPI.NET.Models; using AniAPI.NET.Models.Resources; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; namespace AniAPI.NET { public class AniAPI : IAniAPI { private HttpHelper _httpHelper; private OAuthHelper _oAuthHelper; #region Singleton private static AniAPI _instance; public static AniAPI Instance { get { if(_instance == null) { _instance = new AniAPI(); } return _instance; } } private AniAPI() { _httpHelper = new HttpHelper(); } #endregion public void UseHTTP() { _httpHelper.UseHTTP(); } public void UseHTTPS() { _httpHelper.UseHTTPS(); } public void UseImplicitGrant(string clientId, string redirectUri) { _oAuthHelper = new OAuthHelper(clientId, redirectUri); } public void UseAuthorizationCode(string clientId, string clientSecret, string redirectUri) { _oAuthHelper = new OAuthHelper(clientId, clientSecret, redirectUri); } public void ManualJWT(string jwt) { _httpHelper.SetJWT(jwt); } #region Implementation public async Task Login() { if (_oAuthHelper == null) { throw new Exception("OAuth not setted up!"); } string token = await _oAuthHelper.Login(); if (string.IsNullOrEmpty(token)) { throw new Exception("Token not valid!"); } _httpHelper.SetJWT(token); } public async Task> GetMe() { return await _httpHelper.AuthorizedRequest($"auth/me", HttpMethod.Get); } public async Task> GetAnime(long id) { return await _httpHelper.UnauthorizedRequest($"anime/{id}", HttpMethod.Get); } public async Task>> GetAnimeList(AnimeFilter filter) { return await _httpHelper.UnauthorizedRequest>($"anime/{filter.ToQueryString()}", HttpMethod.Get); } public async Task> GetEpisode(long id) { return await _httpHelper.UnauthorizedRequest($"episode/{id}", HttpMethod.Get); } public async Task>> GetEpisodeList(EpisodeFilter filter) { return await _httpHelper.UnauthorizedRequest>($"episode/{filter.ToQueryString()}", HttpMethod.Get); } public async Task> GetSong(long id) { return await _httpHelper.UnauthorizedRequest($"song/{id}", HttpMethod.Get); } public async Task>> GetSongList(SongFilter filter) { return await _httpHelper.UnauthorizedRequest>($"song/{filter.ToQueryString()}", HttpMethod.Get); } public async Task> GetGenres(string version = "1.0") { return await _httpHelper.UnauthorizedRequest($"resources/{version}/0", HttpMethod.Get); } public async Task> GetLocalizations(string version = "1.0") { return await _httpHelper.UnauthorizedRequest($"resources/{version}/1", HttpMethod.Get); } public async Task> GetUser(long id) { return await _httpHelper.UnauthorizedRequest($"user/{id}", HttpMethod.Get); } public async Task>> GetUserList(UserFilter filter) { return await _httpHelper.UnauthorizedRequest>($"user/{filter.ToQueryString()}", HttpMethod.Get); } public async Task> UpdateUser(User model) { return await _httpHelper.AuthorizedRequest("user", HttpMethod.Post, JsonConvert.SerializeObject(model)); } public async Task> DeleteUser(long id) { return await _httpHelper.AuthorizedRequest($"user/{id}", HttpMethod.Delete); } public async Task> GetUserStory(long id) { return await _httpHelper.AuthorizedRequest($"user_story/{id}", HttpMethod.Get); } public async Task>> GetUserStoryList(UserStoryFilter filter) { return await _httpHelper.AuthorizedRequest>($"user_story/{filter.ToQueryString()}", HttpMethod.Get); } public async Task> CreateUserStory(UserStory model) { return await _httpHelper.AuthorizedRequest("user_story", HttpMethod.Put, JsonConvert.SerializeObject(model)); } public async Task> UpdateUserStory(UserStory model) { return await _httpHelper.AuthorizedRequest("user_story", HttpMethod.Post, JsonConvert.SerializeObject(model)); } public async Task> DeleteUserStory(long id) { return await _httpHelper.AuthorizedRequest($"user_story/{id}", HttpMethod.Delete); } #endregion } }