#!/bin/zsh
_DEPENDENCIES+=()
_REQUIRED_ENV+=()
source ${0:a:h}/common.zsh
#####################################################################

CURL_WITH_CACHE() {
	[ ! $TTL ] && TTL=10
	[[ $CACHE_ENABLED -eq 0 ]] && {
		curl $@
		return $?
	}

	local ARGS=()
	local URL

	while [[ $# -gt 0 ]]
	do
		case $1 in
			--   ) shift 1 ;;
			--*= ) ARGS+=($1); shift 1 ;;
			--*  ) ARGS+=($1 $2); shift 2 ;;
			-*   ) ARGS+=($1); shift 1 ;;
			* ) URL=$1; break ;;
		esac
	done

	local KEY=$(GET_URL_KEY $URL)
	local OUTPUT=$(_REDIS get $KEY 2>&1)
	[ $OUTPUT ] && {
		[[ ${#ARGS[@]} -gt 0 ]] && __WARN "cache hit found; ignoring arguments ($ARGS)"
		echo $OUTPUT
		return
	}

	local OUTPUT=$(curl -s $@)
	[ ! $OUTPUT ] && return 1

	_REDIS set $KEY "$OUTPUT" >/dev/null
	_REDIS expire $KEY $TTL >/dev/null

	echo $OUTPUT
}

GET_URL_KEY() { echo "scwrypts:curl:$1" | sed 's/\s\+/+/g'; }

#####################################################################
CURL_WITH_CACHE $@