module os

// open_uri opens a given uri.
pub fn open_uri(uri string) ! {
	mut vopen_uri_cmd := getenv('VOPEN_URI_CMD')
	if vopen_uri_cmd == '' {
		$if macos {
			vopen_uri_cmd = 'open'
		} $else $if freebsd || openbsd {
			vopen_uri_cmd = 'xdg-open'
		} $else $if linux {
			providers := ['xdg-open', 'x-www-browser', 'www-browser', 'wslview', 'exo-open']
			// There are multiple possible providers to open a browser on linux
			// One of them is xdg-open, another is x-www-browser, then there's www-browser, etc.
			// Look for one that exists and run it
			for provider in providers {
				if exists_in_system_path(provider) {
					vopen_uri_cmd = provider
					break
				}
			}
		}
	}
	if vopen_uri_cmd == '' {
		return error('unsupported platform')
	}
	result := execute('${vopen_uri_cmd} "${uri}"')
	if result.exit_code != 0 {
		return error('unable to open url: ${result.output}')
	}
}
