/* Copyright (c) 2021, la-ninpre
 * 
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * *************************************************************************
 * 
 * this file contains code for cgi version of nimisewi.
 *
 * i know that there are libraries for cgi in c, but c'mon, it's so small and
 * simple.
 * stylesheet is arbitrary, replace with anything you want if you don't like it.
 */

#include <config.h>
#include <err.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#include "nimisewi.h"

static void print_response_header(void);
static void print_html_header(void);
static void print_html_footer(void);
static void print_html_stylesheet(void);

static void
print_response_header(void)
{
    printf("Status: 200 OK\r");
    printf("Content-Type: text/html\r\r");
}

static void
print_html_header(void)
{
    printf("<!doctype html>\n");
    printf("<html>\n");
    printf("<head>\n");
    printf("<title>nimi sewi</title>\n");
    printf("<meta charset=\"utf-8\">\n");
    printf("<meta name=\"generator\" content=\"%s\">\n", PACKAGE_STRING);
    printf("<link rel=\"icon\" href=\"/assets/img/favicon.ico\" type=\"image/x-icon\">\n");
    print_html_stylesheet();
    printf("</head>\n");
    printf("<body>\n");
}

static void
print_html_stylesheet(void)
{
    printf("<style>\n");
    printf("body { background: #ff8; }\n");
    printf("h1 { text-align: center; font: bold 48pt monospace; color: #4ad }\n");
    printf("</style>\n");
}

static void
print_html_footer(void)
{
    printf("</body>\n");
    printf("</html>\n");
}

int 
main(void)
{
#ifdef HAVE_PLEDGE
    if (pledge("stdio", NULL) == -1) {
        err(EXIT_FAILURE, "pledge");
    }
#endif

    char *ns;
    ns = nimi_sewi();
    if (ns == NULL) {
        err(EXIT_FAILURE, "memory allocation failed");
    }

    print_response_header();
    print_html_header();

    printf("<h1>");
    printf("%s", ns);
    printf("</h1>\n");

    weka_e_nimi_sewi(ns);

    print_html_footer();

    return EXIT_SUCCESS;
}