#!/bin/sh 

oc_handle_get() {
	# on attrape le parametre de la fonction
	line="$1" 

	# le verble http (= le premier mot de la requete)
	route="$(echo "$line" |sed -e 's/^GET  *//')"

	echo "Route: $route"

	# table de routage 
	case "$route" in 
		/history) # faire des trucs pour history
			cat history.csv >> input
			# TODO: rediriger ça vers le client
			;;

		/count/*) # faire des trucs pour count
			value="$(echo "$route" |sed -e 's|/count/||')"
			timestamp="$(date --rfc-3339=seconds)"

			echo "$timestamp, $value" >> history.csv
			;;
	esac
}

oc_handle_post() {
	>&2 echo "Warning: NOT YET IMPLEMENTED"
}

oc_handle_request() {
	# on attrape le parametre de la fonction
	read line
	# le verble http (= le premier mot de la requete)
	verb="$(echo "$line" |awk '{print $1;}')"

	echo "Cat pid = $pid"
	echo "Verb: $verb"
	case "$verb" in 
		GET)
			oc_handle_get "$line"
			;;
		POST)
			oc_handle_post "$line"
			;;
	esac
	echo "Closing pipe..."
	exec 3>&-
	> input
}

# écouter sur le port 80 	
# prendre une requete
# lire la requete 'GET ... '

# GET /history
# => oc_history
# GET /count/:value
# => oc_count
oc_server() {
	port="$1" 

	while true ; do 
		exec 3<> input

		>&3 cat input &
		pid="$!"

		echo "Ready for next client !"
		nc -l -q 1 -p "$port" <&3 -c "oc_handle_request"
		#"$pid"
	done
}

oc_server "$1"