# shellcheck shell=dash
___x_cmd log init lua

xrc:mod:lib     lua        proj/_index    thirdparty/_index    xrun    path    compile
___x_cmd_lua___main(){
    [ "$#" -gt 0 ] ||   set -   -i

    local op="$1";      shift
    case "$op" in
        --help|-h)      ___x_cmd help -m lua;                      return 1 ;;
        --xrun)         ___x_cmd_lua___xrun                     "$@" ;;
        ensurecc)       ___x_cmd_lua_ensurecc                   "$@" ;;

        c|--luac)       ___x_cmd_lua___luac                     "$@" ;;      # x luac
        # cc|cpp)         ___x_cmd_lua_"$op"                      "$@" ;;

        i|install)      ___x_cmd_lua_install                    "$@" ;;      # install

        # proj)           ___x_cmd_lua_proj                       "$@" ;;
        init)           ___x_cmd_lua_proj init                  "$@" ;;

        # thirdparty)     ___x_cmd_lua_thirdparty                 "$@" ;;
        format)         ___x_cmd_lua_thirdparty format          "$@" ;;
        check)          ___x_cmd_lua_thirdparty check           "$@" ;;
        static)         ___x_cmd_lua_thirdparty static          "$@" ;;      # compile to binary

        run|--exec)     ___x_cmd_lua___exec                     "$@" ;;      # interpret
        --)             ___x_cmd_lua___exec --                  "$@" ;;
        *)              ___x_cmd_lua___exec "$op"               "$@" ;;
    esac
}

___x_cmd_lua___exec(){
    # ___X_CMD_LUA_EXPORT="$(export)" ___x_cmd_lua___exec_ "$@"
    # TODO: inject some functions inside

    # if -x means -l x=x.lua

    ___x_cmd_lua___exec_ "$@"
}

___x_cmd_lua___exec_(){
    if ___x_cmd_hascmd lua; then
        ___x_cmd_cmds lua "$@"
        return
    fi

    # In the future, we will use official lua pkgbuild
    local platform="${___X_CMD_LUA_DIST_PREFERED:-pkg}"

    case "${platform}" in
        pkg)        ___x_cmd env try lua            || return $?
                    ___x_cmd_cmds       lua "$@"    ;;
        cosmo)      ___x_cmd cosmo      lua "$@"    ;;
        wasmer)     ___x_cmd wasmer     lua "$@"    ;;
        wasmtime)   ___x_cmd wasmtime   lua "$@"    ;;
    esac
    # ___x_cmd cosmo __is_supported_target; then
}

___x_cmd_lua_ensurecc(){
    ___x_cmd zig checkcc || ___x_cmd zig initcc
}


___x_cmd_lua_install(){
    ___x_cmd luarocks install "$@"
}
