import * as http from "http";
import * as MySql2 from "mysql2/promise";
import * as ServiceEnvironment from "sleeveforarm/src/serviceEnvironment";

let responseString = "Not Set!";

async function setUpDb() {
        try {
        const connectionObject =
            ServiceEnvironment.getMySqlConnectionObject("mySql");
        const connection = await MySql2.createConnection(connectionObject);
        try {
            const result = await connection.query("CREATE DATABASE foo");
        } catch (err) {
            if (err.code !== "ER_DB_CREATE_EXISTS") {
                throw err;
            }
        }
        await connection.query("USE foo");
        try {
            await connection.query("CREATE TABLE fooers (name VARCHAR(255))");
        } catch (err) {
            if (err.code !== "ER_TABLE_EXISTS_ERROR") {
                throw err;
            }
        }
        await connection.query("INSERT INTO fooers (name) VALUES ('A Name')");
        await connection.query(
            "INSERT INTO fooers (name) VALUES ('Another Name')");
        const [customers, fields] =
            await connection.query("SELECT * FROM fooers");
        if (customers.length < 2 || customers[0].name !== "A Name" ||
            customers[1].name !== "Another Name") {
            throw new Error(`Returned data failed test`);
        }
        responseString = customers[0].name;
    } catch (err) {
        responseString = "FAILURE! " + err;
    }
}

setUpDb();

const server = http.createServer(function(request, response) {
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.end(responseString);
});

const port = process.env.PORT || 1337;
server.listen(port);

console.log("Server running at http://localhost:%d", port);
