#!/usr/bin/env node

'use strict';

var pkg = require('../package.json');
var os = require('os');
var path = require('path');
var fs = require('fs');
var manager = require('../index.js');

if (require.main === module) {
	run();
}

function run() {
	var ext = /^win/i.test(os.platform()) ? '.exe' : '';
	//var homedir = require('os').homedir();
	//var bindir = path.join(homedir, '.local', 'bin');
	var bindir = path.resolve(__dirname, '..', 'bin');
	var name = pkg.name.replace(/.*\//, '');
	if ('.exe' === ext) {
		winpmstall(pkg.name, name, bindir);
	}

	return manager.install(
		name,
		[bindir],
		'pathman version',
		function parseVersion(stdout) {
			return (stdout || '').split(' ')[0];
		},
		'https://rootprojects.org/pathman/dist/{{ .Platform }}/{{ .Arch }}/pathman{{ .Ext }}'
	);
}

function winpmstall(pkgname, name, bindir) {
	var dd = /\//.test(pkgname) ? '../' : '';
	var pkgpath = pkgname.replace(/@/g, '\\@');

	try {
		fs.writeFileSync(
			path.join(bindir, name),
			[
				'#!/usr/bin/env bash',
				'"$(dirname "$0")/' + name + '.exe" "$@"',
				'exit $?'
			].join('\n')
		);
	} catch (e) {
		// ignore
	}

	// because bugs in npm + git bash oddities, of course
	// https://npm.community/t/globally-installed-package-does-not-execute-in-git-bash-on-windows/9394
	try {
		fs.writeFileSync(
			path.join(__dirname, dd + '../../.bin', name),
			[
				'#!/bin/sh',
				'# manual bugfix patch for npm on windows',
				'basedir=$(dirname "$(echo "$0" | sed -e \'s,\\\\,/,g\')")',
				'"$basedir/../' + pkgpath + '/bin/' + name + '"   "$@"',
				'exit $?'
			].join('\n')
		);
	} catch (e) {
		// ignore
	}
	try {
		fs.writeFileSync(
			path.join(__dirname, dd + '../../..', name),
			[
				'#!/bin/sh',
				'# manual bugfix patch for npm on windows',
				'basedir=$(dirname "$(echo "$0" | sed -e \'s,\\\\,/,g\')")',
				'"$basedir/node_modules/' +
					pkgname +
					'/bin/' +
					name +
					'"   "$@"',
				'exit $?'
			].join('\n')
		);
	} catch (e) {
		// ignore
	}
	// end bugfix
}