using System.Net;
using AsbCloudApp.Requests;
using AsbCloudDb.Model.GTR;
using AsbCloudWebApi.IntegrationTests.Clients;
using Xunit;

namespace AsbCloudWebApi.IntegrationTests.Controllers;

public class GtrControllerTests : BaseIntegrationTest
{
	private readonly IGtrWitsClient client;

	public GtrControllerTests(WebAppFactoryFixture factory)
		: base(factory)
	{
		client = factory.GetAuthorizedHttpClient<IGtrWitsClient>(string.Empty);
	}

	[Fact]
	public async Task GetAll_returns_success()
	{
		//arrange
		var well = dbContext.Wells.First();
		
		var witsItems = CreateWitsItems(well.IdTelemetry!.Value);
		dbContext.WitsItemFloat.AddRange(witsItems);
		await dbContext.SaveChangesAsync();
		
		var request = new GtrRequest();
		
		//act
		var response = await client.GetAllAsync(well.Id, request);

		//assert
		Assert.Equal(HttpStatusCode.OK, response.StatusCode);
		Assert.NotNull(response.Content);
		Assert.True(response.Content.Any());
	}

	private static IEnumerable<WitsItemFloat> CreateWitsItems(int idTelemetry) =>
		new[]
		{
			new WitsItemFloat
			{
				IdRecord = 1,
				IdItem = 14,
				Value = 4,
				IdTelemetry = idTelemetry,
				DateTime = DateTimeOffset.UtcNow
			},
			new WitsItemFloat
			{
				IdRecord = 1,
				IdItem = 14,
				Value = 5,
				IdTelemetry = idTelemetry,
				DateTime = DateTimeOffset.UtcNow
			},
			new WitsItemFloat
			{
				IdRecord = 1,
				IdItem = 12,
				Value = 5,
				IdTelemetry = idTelemetry,
				DateTime = DateTimeOffset.UtcNow.AddSeconds(10)
			}
		};
}