#include "detlef_helpers.h"
#include <stdio.h>

static DetlefStatus run(void *data, DetlefAccess *access) {
    (void)data;
    DetlefHandle result = 0;
    DetlefStatus status = detlef_execute_cstr(
        access, "courier_quote(1200, true)", &result);
    if (status != DETLEF_OK)
        return status;
    DetlefText quote = {NULL, 0};
    status = detlef_value_to_string(access, result, &quote);
    DetlefStatus cleanup = detlef_handle_release(access, result);
    if (status == DETLEF_OK) {
        fwrite(quote.data, 1, quote.len, stdout);
        fputc('\n', stdout);
    }
    detlef_text_free(quote);
    if (status != DETLEF_OK)
        return status;
    if (cleanup != DETLEF_OK)
        return cleanup;
    return DETLEF_OK;
}

int main(int argc, char **argv) {
    if (argc != 2)
        return 2;
    DetlefRuntime *runtime = detlef_runtime_new();
    if (!runtime)
        return 1;
    DetlefStatus status = detlef_runtime_load_package(runtime, detlef_cstr(argv[1]));
    if (status == DETLEF_OK)
        status = detlef_runtime_access(runtime, run, NULL);
    if (status != DETLEF_OK) {
        DetlefText error = {NULL, 0};
        if (detlef_last_error(runtime, &error) == DETLEF_OK) {
            if (error.len)
                fwrite(error.data, 1, error.len, stderr);
            fputc('\n', stderr);
            detlef_text_free(error);
        }
    }
    detlef_runtime_free(runtime);
    return status == DETLEF_OK ? 0 : 1;
}
