#include <stddef.h>
#include <chttp.h>

// This example shows how undo a response that is being built
// when an error occurs.

int main(void)
{
    HTTP_Server *server = http_server_init(HTTP_STR("127.0.0.1"), 8080);
    if (server == NULL)
        return -1;

    for (;;) {

        HTTP_Request *req;
        HTTP_ResponseHandle res;

        int ret = http_server_wait(server, &req, &res);
        if (ret < 0) return -1;

        // Say we are building a request..

        http_response_status(res, 200);
        http_response_header(res, "Content-Type: text/plain");

        // .. and in the middle of building an error condition
        // occurs. Maybe a file was missing or an allocation fails.
        // The proper response in this case would be a code 500
        // with an error message, but we already wrote the first
        // part of the response assuming the operation would succede.
        //
        // You can use the *_undo function to reset the response
        // building process

        bool error_occurred = true;
        if (error_occurred) {

            http_response_undo(res);

            // Now we are back to setting the status code
            http_response_status(res, 500);
            http_response_header(res, "Content-Type: text/plain");
            http_response_body(res, HTTP_STR("An error occurred!"));
            http_response_done(res);

        } else {

            // If no error occures, we finish as planned
            http_response_body(res, HTTP_STR("Hello, world!"));
            http_response_done(res);
        }
    }

    http_server_free(server);
    return 0;
}
