using Microsoft.AspNetCore.Mvc;

List<AeroplaneDal> aeroplanes = new()
{
    new AeroplaneDal() { AeroplaneId = Guid.NewGuid(), Name = "Boeing 747", Weght = 41140, Lenght = 40, ProductionDate = new DateTime(2010, 4, 15)},
    new AeroplaneDal() { AeroplaneId = Guid.NewGuid(), Name = "Ту-154", Weght = 55300, Lenght = 48, ProductionDate = new DateTime(2005, 3, 20)},
    new AeroplaneDal() { AeroplaneId = Guid.NewGuid(), Name = "Ил-86", Weght = 117500, Lenght = 60, ProductionDate = new DateTime(2005, 9, 7)},
};



var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.MapGet("/Aeroplanes/", () =>
{
    var result = aeroplanes.Select(r => new worker_1.Models.Aeroplane.GetList.AeroplaneResult()
    {
        AeroplaneId = r.AeroplaneId,
        Name = r.Name,
        Lenght = r.Lenght,
        ProductionDate = r.ProductionDate,
        Weght = r.Weght,
    }).ToArray();

    return Results.Ok(result);
})
.WithName("List")
.WithOpenApi();

app.MapGet("/Aeroplanes/{aeroplaneId}", (Guid aeroplaneId) =>
{
    var aeroplane = aeroplanes.FirstOrDefault(r => r.AeroplaneId == aeroplaneId);
    if (aeroplane is null)
    {
        return Results.NotFound($"Не найдена самолет {aeroplaneId}");
    }

    return Results.Json(new worker_1.Models.Aeroplane.Get.AeroplaneResult()
    {
        AeroplaneId = aeroplane.AeroplaneId,
        Name = aeroplane.Name,
        Lenght = aeroplane.Lenght,
        ProductionDate = aeroplane.ProductionDate,
        Weght = aeroplane.Weght,
    });
})
.WithName("Get")
.WithOpenApi();

app.MapPost("/Aeroplanes/", ([FromBody] worker_1.Models.Aeroplane.Create.AeroplaneForm request) =>
{
    Guid aeroplaneId = Guid.NewGuid();
    aeroplanes.Add(new AeroplaneDal()
    {
        AeroplaneId = aeroplaneId,
        Lenght = request.Lenght,
        ProductionDate = request.ProductionDate,
        Weght = request.Weght,
        Name = request.Name,
    });

    return Results.Ok(aeroplaneId);
})
.WithName("Create")
.WithOpenApi();

app.MapPatch("/Aeroplanes/{aeroplaneId}", (Guid aeroplaneId, [FromBody] worker_1.Models.Aeroplane.Create.AeroplaneForm request) =>
{
    var aeroplane = aeroplanes.FirstOrDefault(r => r.AeroplaneId == aeroplaneId);
    if (aeroplane is null)
    {
        return Results.NotFound($"Не найден самолет {aeroplaneId}");
    }

    if (!string.IsNullOrEmpty(request.Name))
    {
        aeroplane.Name = request.Name;
    }

    aeroplane.ProductionDate = request.ProductionDate;
    aeroplane.Lenght = request.Lenght;
    aeroplane.Weght = request.Weght;
    
    return Results.Ok(aeroplane);
})
.WithName("Update")
.WithOpenApi();

app.MapDelete("/Aeroplanes/{aeroplaneId}", (Guid aeroplaneId) =>
{
    var aeroplane = aeroplanes.FirstOrDefault(r => r.AeroplaneId == aeroplaneId);
    if (aeroplane is null)
    {
        return Results.NotFound($"Не найден самолет {aeroplaneId}");
    }

    aeroplanes.Remove(aeroplane);
    return Results.Ok(aeroplaneId);
})
.WithName("Delete")
.WithOpenApi();

app.Run();



public class AeroplaneDal
{
    public Guid AeroplaneId { get; set; }

    public string Name { get; set; }

    public DateTime ProductionDate { get; set; }

    public int Weght { get; set; }

    public int Lenght { get; set; }
}