using System.Net;
using System.Text;
using System.Text.Json;
using Sisk.Cadente;

HttpHost.QueueSize = 4096;

var host = new HttpHost ( new IPEndPoint ( IPAddress.Any, 8080 ) );
host.ContextCreated += Host_ContextCreated;

host.Start ();
Thread.Sleep ( Timeout.Infinite );

void Host_ContextCreated ( HttpHost sender, HttpHostContext session ) {
    var request = session.Request;
    
    if (request.Path == "/plaintext") {
        SerializePlainTextResponse ( session.Response );
    }
    else if (request.Path == "/json") {
        SerializeJsonResponse ( session.Response );
    }
    else {
        session.Response.StatusCode = 404;
    }
}

static void SerializePlainTextResponse ( HttpHostContext.HttpResponse response ) {

    var messageBytes = Encoding.UTF8.GetBytes ( "Hello, World!" );

    response.Headers.Add ( new HttpHeader ( "Content-Type", "text/plain; charset=UTF-8" ) );
    response.ResponseStream = new MemoryStream ( messageBytes );
}

static void SerializeJsonResponse ( HttpHostContext.HttpResponse response ) {

    var contentBytes = JsonSerializer.SerializeToUtf8Bytes ( new {
        message = "Hello, World!"
    } );
    
    response.Headers.Add ( new HttpHeader ( "Content-Type", "application/json" ) );
    response.ResponseStream = new MemoryStream ( contentBytes );
}