using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

using var host = Host.CreateDefaultBuilder(args)
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.Configure(app =>
        {
            app.UseRouting();

            app.UseEndpoints(endpoints =>
            {
                Todo EchoTodo([FromBody] Todo todo) => todo;
                endpoints.MapPost("/EchoTodo", (Func<Todo, Todo>)EchoTodo);

                string Plaintext() => "Hello, World!";
                endpoints.MapGet("/plaintext", (Func<string>)Plaintext);

                object Json() => new { message = "Hello, World!" };
                endpoints.MapGet("/json", (Func<object>)Json);

                string SayHello(string name) => $"Hello {name}";
                endpoints.MapGet("/hello/{name}", (Func<string, string>)SayHello);
            });
        });
    })
    .Build();

await host.RunAsync();

record Todo(int Id, string Name, bool IsComplete);