#!/bin/sh

# Origin: http://code.google.com/p/lindenb/source/browse/trunk/src/xsl/linkedin2foaf.xsl
# info: http://plindenbaum.blogspot.com/2010/02/linkedinxslt-foaf-people-from.html

set -e

exit1() {
	echo "ERROR: $1"
	exit 1
}

bindir=$(dirname "$0")
xsltdir="$bindir"

turtle2foaf() {
	inpath="$1"
	outpath="$2"
	[ -n "$outpath" ] || outpath=$(echo "$inpath" | perl -pe 's/\.ttl$/.rdf/ or exit 1') || exit1 "Failed resolving output RDF file from input Turtle file \"$inpath\"."

	[ -e "$inpath" ] || exit1 "Turtle file \"$inpath\" does not exist."
#	[ ! -e "$outpath" ] || exit1 "RDF file \"$outpath\" already exists."

	base="$(perl -ne '/^\@base\s+<(http.+)>/ and print $1 and exit;' "$inpath")" || true
	rapper ${base:+-I "$base"} -i turtle -o rdfxml-abbrev "$inpath" > "$outpath"
	foafsign "$outpath"
}

linkedin2foaf() {
	inpath="$1"
	outpath="$2"
	[ -n "$outpath" ] || outfile=index.rdf && outpath="$(dirname "$inpath")/linkedin/$outfile"
	outdir=$(dirname "$outpath")
	tmppath="$outdir/index.html"

	[ -e "$inpath" ] || exit1 "Turtle file \"$inpath\" does not exist."
	[ ! -e "$tmppath" ] || exit1 "Tempfile \"$tmppath\" already exists."

# TODO: support homepage as fallback for accountName
#	id=$(perl -0 -ne '/foaf:accountServiceHomepage\s+<http:\/\/www.linkedin.com\/>\s+;\s+foaf:(?:homepage\s+<(?=http)|accountName\s+")([^<"\s]+)/ and print $1 and exit;' "$inpath") #'
#	id=$(perl -0 -ne '/^:me.*?foaf:accountServiceHomepage\s+<http:\/\/www.linkedin.com\/>\s+;\s+foaf:accountName\s+"([^<"\s]+)/ms and print $1 and exit;' "$inpath") #'
#	id=62345396
	id=jonassm
	[ -n "$id" ] || exit1 "Failed to resolve LinkedIn account name."
	uri="http://www.linkedin.com/in/$id"

	mkdir -p "$outdir"
# work around unescaped &'s in linkedin pages
#	xsltproc --html "$bindir/linkedin2foaf.xsl" "$uri" > "$outpath"
	wget -q -O "$tmppath" "$uri"
#	perl -i -pe 's/&([a-zA-Z0-9]+=|\s)/&amp;$1/g' "$tmppath"
#	xsltproc --html "$xsltdir/linkedin2foaf.xsl" "$tmppath" > "$outpath"
	perl "$bindir/linkedin2rdf.pl" "$tmppath" "$uri" > "$outpath"
	rm -f "$tmppath"
	foafsign "$outpath"
}

tidyfacebookfoaf() {
	inpath="$1"
	outpath="$2"

	[ -e "$inpath" ] || exit1 "Facebook Exporter RDF file \"$inpath\" does not exist."

	perl "$bindir/fbfixup.pl" "$inpath" > "$outpath"
	foafsign "$outpath"
}

foafsign() {
	inpath="$1"
	outpath="${inpath}_sig.pgp"
	gpg -a -o- --detach-sign "$inpath" > "$outpath"
}

paths="$@"
[ -n "$paths" ] || paths=index.ttl

for path in $paths; do
	basedir=$(dirname "$path")
	turtle2foaf "$path"
	linkedin2foaf "$path" || true
#	tidyfacebookfoaf "$basedir/facebook/foaf.xml" "$basedir/facebook/index.rdf" || true
	foafsign "$basedir/facebook/index.rdf" || true
done