using Microsoft.OpenApi.Models;

var builder = WebApplication.CreateBuilder(args);

// Add Swagger services
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen(c =>
{
    c.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
});

var app = builder.Build();

// Configure the HTTP request pipeline.

app.UseSwagger();
app.UseSwaggerUI(c =>
{
    c.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
});


List<Medicine> medicines = new List<Medicine>();

app.MapGet("/medicines", () => medicines);

app.MapGet("/medicine/{id}", (Guid id) =>
{
var medicine = medicines.FirstOrDefault(m => m.Id == id);
return medicine is null ? Results.NotFound() : Results.Ok(medicine);
});

app.MapPost("/medicine", (Medicine medicine) =>
{
medicines.Add(medicine);
return Results.Created($"/medicine/{medicine.Id}", medicine);
});

app.MapPut("/medicine/{id}", (Guid id, Medicine inputMedicine) =>
{
var medicine = medicines.FirstOrDefault(m => m.Id == id);

if (medicine is null) return Results.NotFound();

medicine.Name = inputMedicine.Name;
medicine.Dose = inputMedicine.Dose;
medicine.ExpirationDate = inputMedicine.ExpirationDate;

return Results.NoContent();
});

app.MapDelete("/medicine/{id}", (Guid id) =>
{
var medicine = medicines.FirstOrDefault(m => m.Id == id);

if (medicine is null) return Results.NotFound();

medicines.Remove(medicine);

return Results.Ok(medicine);
});

app.MapGet("/Requests/", async () =>
{
    var httpClient = new HttpClient();
    var secondWorkerResponse = await httpClient.GetStringAsync("http://worker-1:8085/");

    return secondWorkerResponse;
});

app.Run();


public class Medicine
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public int Dose { get; set; }
    public DateTime ExpirationDate { get; set; }
}