using Knoks.Api.Client;
using Knoks.Api.Nswag.Client;
using Knoks.Test.Integrations.Api.Tools;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Xunit;
using System.Linq;
using Knoks.Api.Nswag.ClientApp;
using Xunit.Abstractions;

namespace Knoks.Test.Integrations.Nswag.Api
{
    public class AccountControllerTests
        : IAsyncLifetime
    {
        public ApiClient ApiClient { get; }
        public HttpClient HttpClient { get; }
        public AccountClient Client { get; }
        public FavoritesClient FavoritesClient { get; }
        public FollowsClient FollowsClient { get; }
        private readonly ITestOutputHelper output;
        public AccountControllerTests(ITestOutputHelper output)
        {
            this.output = output;
            HttpClient = ApiTestServer.CreateClient();
            ApiClient = new ApiClient(ApiTestServer.ApiIndetifier, HttpClient);

            Client = new AccountClient(HttpClient);
            Client.BaseUrl = "http://localhost:52281/";
            FavoritesClient = new FavoritesClient(HttpClient);
            FavoritesClient.BaseUrl = Client.BaseUrl;
            FollowsClient = new FollowsClient(HttpClient);
            FollowsClient.BaseUrl = Client.BaseUrl;
        }
        public async Task InitializeAsync()
        {
            await ApiClient.AuthorizeApiUser("CompanyWallet@knoks.com", "XXXXXX");
        }

        public Task DisposeAsync()
        {
            HttpClient.Dispose();
            return Task.CompletedTask;
        }
        [Fact(DisplayName = "Favorites")]

        void TestFavorites()
        {
            FavoritesClient.Add(1);
            FavoritesClient.Add(2);
            var cur = FavoritesClient.Get().Result.Items;
            Assert.Contains(1, cur);
            Assert.Contains(2, cur);
            FavoritesClient.Remove(1);
            FavoritesClient.Remove(2);
            var cur2 = FavoritesClient.Get().Result.Items;
            Assert.Empty(cur2);
        }
        [Fact(DisplayName = "Follow")]

        void TestFollow()
        {
            FollowsClient.Add(1);
            FollowsClient.Add(2);
            var cur = FollowsClient.Get().Result.Items;
            Assert.Contains(1, cur);
            Assert.Contains(2, cur);
            FollowsClient.Remove(1);
            FollowsClient.Remove(2);
            var cur2 = FollowsClient.Get().Result.Items;
            Assert.Empty(cur2);
        }
    }
}
