/**
 * Console API 插件
 * 
 * 提供跨平台调试输出功能（内置）
 * - console_log()
 * - console_debug()
 * - console_error()
 */

#include <stdint.h>
#include <windows.h>

// 导出函数标记
#define CONSOLE_API __declspec(dllexport)

// 从 runtime 导入的函数
extern double js_undefined(void);
extern const char* js_string_unpack(double val);

// strlen 函数（runtime_nocrt.c 中是 static，这里需要重新定义）
static uint32_t js_strlen(const char* s) {
    uint32_t len = 0;
    while (s[len]) len++;
    return len;
}

/**
 * console_log(msg) - 标准输出
 */
CONSOLE_API double console_log(double msg_val) {
    const char* msg = js_string_unpack(msg_val);
    if (msg) {
        uint32_t len = js_strlen(msg);
        WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), msg, len, NULL, NULL);
        // 添加换行符
        const char* newline = "\n";
        WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), newline, 1, NULL, NULL);
    }
    return js_undefined();
}

/**
 * console_debug(msg) - 调试输出（到 stderr）
 */
CONSOLE_API double console_debug(double msg_val) {
    const char* msg = js_string_unpack(msg_val);
    if (msg) {
        const char* prefix = "[DEBUG] ";
        uint32_t prefix_len = 8;
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), prefix, prefix_len, NULL, NULL);
        uint32_t len = js_strlen(msg);
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, len, NULL, NULL);
        const char* newline = "\n";
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), newline, 1, NULL, NULL);
    }
    return js_undefined();
}

/**
 * console_error(msg) - 错误输出（到 stderr）
 */
CONSOLE_API double console_error(double msg_val) {
    const char* msg = js_string_unpack(msg_val);
    if (msg) {
        const char* prefix = "[ERROR] ";
        uint32_t prefix_len = 8;
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), prefix, prefix_len, NULL, NULL);
        uint32_t len = js_strlen(msg);
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), msg, len, NULL, NULL);
        const char* newline = "\n";
        WriteFile(GetStdHandle(STD_ERROR_HANDLE), newline, 1, NULL, NULL);
    }
    return js_undefined();
}
