#include "ecewo.h"
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include "ecewo-static.h"

char* replaceWord(const char* s, const char* oldW, 
                const char* newW) 
{ 
    char* result; 
    int i, cnt = 0; 
    int newWlen = strlen(newW); 
    int oldWlen = strlen(oldW); 

    // Counting the number of times old word 
    // occur in the string 
    for (i = 0; s[i] != '\0'; i++) { 
        if (strstr(&s[i], oldW) == &s[i]) { 
            cnt++; 

            // Jumping to index after the old word. 
            i += oldWlen - 1; 
        } 
    } 

    // Making new string of enough length 
    result = (char*)malloc(i + cnt * (newWlen - oldWlen) + 1); 

    i = 0; 
    while (*s) { 
        // compare the substring with the result 
        if (strstr(s, oldW) == s) { 
            strcpy(&result[i], newW); 
            i += newWlen; 
            s += oldWlen; 
        } 
        else
            result[i++] = *s++; 
    } 

    result[i] = '\0'; 
    return result; 
} 

char* replacemsg(char *string) {
	string = replaceWord(string, "%20", " ");
	string = replaceWord(string, "+", " ");
	string = replaceWord(string, "%3F", "?");
	string = replaceWord(string, "%21", "!");
	string = replaceWord(string, "%2C", ",");
	string = replaceWord(string, "%28", "(");
	string = replaceWord(string, "%29", ")");
	string = replaceWord(string, "%3A", ":");
	string = replaceWord(string, "%2F", "/");
	return string;
}

void add(Req *req, Res *res) {
	const char *name = get_query(req, "name");
	char *msg = get_query(req, "msg");
	if(name == NULL || msg == NULL) send_text(res, 400, "Not enough arguments");
	msg = replacemsg(msg);
	FILE *fp;
	fp = fopen("thread.html", "a+");
	if(fp == NULL) send_text(res, 500, "Internal server error");
	fprintf(fp, "%s - %s<br>\n", msg, name);
	fclose(fp);
	redirect(res, 301, "https://tklab.eu1.netbird.services/spam.html");
}

int main() {

	if (server_init() != 0) {
    		fprintf(stderr, "Failed to initialize server\n");
    		return -1;
	}
	
		if (static_init() != 0) {
        	fprintf(stderr, "Failed to initialize static module\n");
        	return 1;
    	}

	get("/add", add);
	if (server_listen(3000) != 0) {
		fprintf(stderr, "Failed to start server\n");
		return -1;
	}
	server_atexit(static_cleanup);
	server_run();
	return 0;
}