#+build js wasm32, js wasm64p32
#+private
package os

// None of this does anything on js/wasm.
// It's only here so importing `core:os` on wasm panics cleanly,
// without spamming about all sorts of missing procs and types.

import "base:runtime"

_Path_Separator        :: '/'
_Path_Separator_String :: "/"
_Path_List_Separator   :: ':'

_is_path_separator :: proc(c: byte) -> (ok: bool) {
	return c == _Path_Separator
}

_mkdir :: proc(name: string, perm: Permissions) -> (err: Error) {
	return .Unsupported
}

_mkdir_all :: proc(path: string, perm: Permissions) -> (err: Error) {
	return .Unsupported
}

_remove_all :: proc(path: string) -> (err: Error) {
	return .Unsupported
}

_get_working_directory :: proc(allocator: runtime.Allocator) -> (dir: string, err: Error) {
	return "", .Unsupported
}

_set_working_directory :: proc(dir: string) -> (err: Error) {
	return .Unsupported
}

_get_executable_path :: proc(allocator: runtime.Allocator) -> (path: string, err: Error) {
	return "", .Unsupported
}

_are_paths_identical :: proc(a, b: string) -> bool {
	return false
}

_clean_path_handle_start :: proc(path: string, buffer: []u8) -> (rooted: bool, start: int) {
	return
}

_is_absolute_path :: proc(path: string) -> bool {
	return false
}

_get_absolute_path :: proc(path: string, allocator: runtime.Allocator) -> (absolute_path: string, err: Error) {
	return "", .Unsupported
}

_get_relative_path_handle_start :: proc(base, target: string) -> bool {
	return false
}

_get_common_path_len :: proc(base, target: string) -> int {
	i := 0
	end := min(len(base), len(target))
	for j in 0..=end {
		if j == end || _is_path_separator(base[j]) {
			if base[i:j] == target[i:j] {
				i = j
			} else {
				break
			}
		}
	}
	return i
}

_split_path :: proc(path: string) -> (dir, file: string) {
	i := len(path) - 1
	for i >= 0 && !_is_path_separator(path[i]) {
		i -= 1
	}
	if i == 0 {
		return path[:i+1], path[i+1:]
	} else if i > 0 {
		return path[:i], path[i+1:]
	}
	return "", path
}