using Microsoft.AspNetCore.Mvc;

List<CompanyDal> companies = new()
{
    new CompanyDal() { CompanyId = Guid.NewGuid(), Name = "Microsoft", FieldOfActivity = "Информационные технологии", Location = "США"},
    new CompanyDal() { CompanyId = Guid.NewGuid(), Name = "Додо пицца", FieldOfActivity = "Питание", Location = "Россия"},
    new CompanyDal() { CompanyId = Guid.NewGuid(), Name = "Renault", FieldOfActivity = "Автомобилестроение", Location = "Франция"},
};



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("/Companies/", () =>
{
    var result = companies.Select(r => new worker_1.Models.Company.GetList.CompanyResult()
    {
        CompanyId = r.CompanyId,
        Name = r.Name,
        FieldOfActivity = r.FieldOfActivity,
        Location = r.Location,
    }).ToArray();

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

app.MapGet("/Companies/{companyId}", (Guid companyId) =>
{
    var company = companies.FirstOrDefault(r => r.CompanyId == companyId);
    if (company is null)
    {
        return Results.NotFound($"Не найдена компания {companyId}");
    }

    return Results.Json(new worker_1.Models.Company.Get.CompanyResult()
    {
        CompanyId = company.CompanyId,
        Name = company.Name,
        FieldOfActivity = company.FieldOfActivity,
        Location = company.Location,
    });
})
.WithName("Get")
.WithOpenApi();

app.MapPost("/Companies/", ([FromBody] worker_1.Models.Company.Create.CompanyForm request) =>
{
    Guid companyId = Guid.NewGuid();
    companies.Add(new CompanyDal()
    {
        CompanyId = companyId,
        FieldOfActivity = request.FieldOfActivity,
        Location = request.Location,
        Name = request.Name,
    });

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

app.MapPatch("/Companies/{companyId}", (Guid companyId, [FromBody] worker_1.Models.Company.Create.CompanyForm request) =>
{
    var company = companies.FirstOrDefault(r => r.CompanyId == companyId);
    if (company is null)
    {
        return Results.NotFound($"Не найдена компания {companyId}");
    }

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

    if (!string.IsNullOrEmpty(request.Location))
    {
        company.Location = request.Location;
    }

    if (!string.IsNullOrEmpty(request.FieldOfActivity))
    {
        company.FieldOfActivity = request.FieldOfActivity;
    }
    return Results.Ok(company);
})
.WithName("Update")
.WithOpenApi();

app.MapDelete("/Companies/{companyId}", (Guid companyId) =>
{
    var company = companies.FirstOrDefault(r => r.CompanyId == companyId);
    if (company is null)
    {
        return Results.NotFound($"Не найдена компания {companyId}");
    }

    companies.Remove(company);
    return Results.Ok(companyId);
})
.WithName("Delete")
.WithOpenApi();

app.Run();



public class CompanyDal
{
    public Guid CompanyId { get; set; }

    public string Name { get; set; }

    public string FieldOfActivity { get; set; }

    public string Location { get; set; }
}