/**
 * @author Ethan Davis
 * https://github.com/ethanent/gar
 */
export default (sargs: string[]): any => {
	let props: any = {}
	let lones: any = []

	const convertIfApplicable = (value: any) => (isNaN(value) ? (value.toString().toLowerCase() === 'true' ? true : (value.toString().toLowerCase() === 'false' ? false : value)) : Number(value))
	const removeStartHyphens = (value: string) => value.replace(/^\-+/g, '')

	for (let i = 0; i < sargs.length; i++) {
		const equalsIndex = sargs[i].indexOf('=')
		const isNextRefProp = sargs[i].charAt(0) === '-' && sargs.length - 1 >= i + 1 && sargs[i + 1].indexOf('=') === -1 && sargs[i + 1].charAt(0) !== '-'
		const argName = equalsIndex === -1 ? removeStartHyphens(sargs[i]) : removeStartHyphens(sargs[i].slice(0, equalsIndex))

		if (equalsIndex !== -1) {
			props[argName] = convertIfApplicable(sargs[i].slice(equalsIndex + 1))
		}
		else if (isNextRefProp) {
			props[argName] = convertIfApplicable(sargs[i + 1])
			i++
		} else if (sargs[i].charAt(0) === '-') {
			if (sargs[i].charAt(1) === '-') {
				props[argName] = true
			}
			else {
				for (let b = 0; b < argName.length; b++) {
					props[argName.charAt(b)] = true
				}
			}
		} else {
			lones.push(convertIfApplicable(argName))
		}
	}

	return Object.assign(props, {
		'_': lones
	})
}
