import {HttpResponse} from "uWebSockets.js";


export class BaseController {
    protected addCorsHeaders(res: HttpResponse): void {
        res.writeHeader('access-control-allow-headers', 'Origin, X-Requested-With, Content-Type, Accept');
        res.writeHeader('access-control-allow-methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
        res.writeHeader('access-control-allow-origin', '*');
    }

    /**
     * Turns any exception into a HTTP response (and logs the error)
     */
    // eslint-disable-next-line @typescript-eslint/no-explicit-any
    protected errorToResponse(e: any, res: HttpResponse): void {
        if (e && e.message) {
            let url = e?.config?.url;
            if (url !== undefined) {
                url = ' for URL: '+url;
            } else {
                url = '';
            }
            console.error('ERROR: '+e.message+url);
        } else if (typeof(e) === 'string') {
            console.error(e);
        }
        if (e.stack) {
            console.error(e.stack);
        }
        if (e.response) {
            res.writeStatus(e.response.status+" "+e.response.statusText);
            this.addCorsHeaders(res);
            res.end("An error occurred: "+e.response.status+" "+e.response.statusText);
        } else {
            res.writeStatus("500 Internal Server Error")
            this.addCorsHeaders(res);
            res.end("An error occurred");
        }
    }
}
