module filepath

// ext returns the extension in the file `path`.
pub fn ext(path string) string {
	pos := path.last_index('.') or {
		return ''
	}
	return path[pos..]
}

// is_abs returns true if `path` is absolute.
pub fn is_abs(path string) bool {
	$if windows {
		return path[0] == `/` || // incase we're in MingGW bash
		(path[0].is_letter() && path[1] == `:`)
	}
	return path[0] == `/`
}

// join returns path as string from string parameter(s).
pub fn join(base string, dirs ...string) string {
	mut result := []string
	result << base.trim_right('\\/')
	for d in dirs {
		result << d
	}
	return result.join(path_separator)
}

// dir returns all but the last element of path, typically the path's directory.
pub fn dir(path string) string {
	pos := path.last_index(path_separator) or {
		return '.'
	}
	return path[..pos]
}

// basedir returns a directory name from path
pub fn basedir(path string) string {
	pos := path.last_index(path_separator) or {
		return path
	}
	// NB: *without* terminating /
	return path[..pos]
}

// filename returns a file name from path
pub fn filename(path string) string {
	return path.all_after(path_separator)
}