import handy_httpd;
import handy_httpd.handlers.path_handler;
import std.process;

static import api_modules.auth;
static import api_modules.announcement;
static import api_modules.classroom_compliance.api;

void main() {
	string env = environment.get("TEACHER_TOOLS_API_ENV", "DEV");

	ServerConfig config;
	config.enableWebSockets = false;
	config.port = 8080;
	config.workerPoolSize = 3;

	config.defaultHeaders["Access-Control-Allow-Origin"] = "*";
	config.defaultHeaders["Access-Control-Allow-Methods"] = "*";
	config.defaultHeaders["Access-Control-Request-Method"] = "*";
	config.defaultHeaders["Access-Control-Allow-Headers"] = "Authorization, Content-Length, Content-Type";

	if (env == "PROD") {
		config.port = 8107;
		config.workerPoolSize = 5;
	}

	PathHandler handler = new PathHandler();
	handler.addMapping(Method.OPTIONS, "/api/**", &optionsEndpoint);
	if (env == "DEV") {
		handler.addMapping("/api/initialize-schema", &initializeSchemaEndpoint);
		handler.addMapping("/api/generate-sample-data", &sampleDataEndpoint);
	}
	api_modules.auth.registerApiEndpoints(handler);
	api_modules.announcement.registerApiEndpoints(handler);
	api_modules.classroom_compliance.api.registerApiEndpoints(handler);

	HttpServer server = new HttpServer(handler, config);
	server.start();
}

void optionsEndpoint(ref HttpRequestContext ctx) {
	ctx.response.status = HttpStatus.OK;
}

void initializeSchemaEndpoint(ref HttpRequestContext ctx) {
	import db : initializeSchema;
	initializeSchema();
}

void sampleDataEndpoint(ref HttpRequestContext ctx) {
	import sample_data : insertSampleData;
	insertSampleData();
}