#!/usr/local/plan9/bin/rc

# setup
leaf_ext='md'
index_name='index'
REQUEST_METHOD='GET'

if(! ~ $#* 3) {
	echo 'usage: '^$0^' <werc.rc> <sites-dir> <output-dir>'
	exit 1
}

path=(. $PLAN9/bin ./bin /bin /usr/bin)

werc_cmd='./'^`{basename $1}
werc_dir=`{dirname $1}

# normalise sites_dir
if(~ $2 *'/')
	sites_dir=$2
if not
	sites_dir=$2^'/'

# normalise output_dir
if(~ $3 *'/')
	output_dir=$3
if not
	output_dir=$3^'/'

fn request {
	curr_path=`{pwd | sed 's|'^$"site_dir^'||g'}
	curr_resource=`{echo $1 | sed 's|.md$||'}
	if(~ $curr_path '')
		curr_path='/'
	if(! ~ $curr_path *'/')
		curr_path = $curr_path^'/'
	if(~ $curr_resource $index_name)
		REQUEST_URI=$curr_path
	if not
		REQUEST_URI=$curr_path^$curr_resource
	echo request $SERVER_NAME $REQUEST_URI
	curr_dir=`{pwd}
	mkdir -p $output_dir^$SERVER_NAME^$curr_path
	cd $werc_dir
	$werc_cmd > $output_dir^$SERVER_NAME^$curr_path^$curr_resource^'.html'
	cd $curr_dir
}

fn process {
	if(~ $1 .* _*) { # ignore hidden or _werc related files/dirs
		if(test $debug)
			echo ignored $1
	}
	if not {
		if(~ $1 *'.'^$leaf_ext)
			request $1
		if(~ $1 *'/') {
			if(test $debug)
				echo processing $1
			cd $1
			for(e in `{ls -F})
				process $e
			cd ..
		}
	}
}

cd $sites_dir
for(s in *) {
	if(~ $s .* _*) { # ignore hidden or _werc related files/dirs
		if(test $debug)
			echo ignored $s
	}
	if not {
		site_dir=$sites_dir^$s
		SERVER_NAME=$s
		cd $s
		for(e in `{ls -F})
			process $e
		cd ..
	}
}
