#!/bin/bash
REPODIR="$HOME/projects"
BAREDIR="$HOME/bare"
REPOSTORE="$HOME/.arching-kaos/repostore"
if [ ! -d $BAREDIR ]; then mkdir $BAREDIR; fi
if [ ! -d $REPODIR ]; then echo "no $REPODIR" && exit; fi
if [ ! -f $REPOSTORE ]; then touch $REPOSTORE; fi
import(){
	REPOS="$(ls -1 $REPODIR)"
	for PROJECT in $REPOS
	do
		cd $BAREDIR
		# Can be as well be
	        # git clone --bare $REPODIR/$PROJECT/.git
		# or whatever form git let's you use
		git clone --bare http://git.h.kaotisk-hund.com/$PROJECT/.git
		if [ $? == 0 ]
		then
			cd $PROJECT.git
			git repack -a
			IPFS="$(ak-ipfs-add .)"
			ak-ipfs-key-gen "$PROJECT.git"
			ak-ipfs-name-publish --key="$PROJECT.git" /ipfs/$IPFS
			cd $HOME/bare
		else
			echo "$PROJECT not a git repo"
		fi
	done
}

update(){
	if [ ! -z $1 ]
	then
		USING="$1"
		REPO="$REPODIR/$1/.git"
		BARE="$BAREDIR/$1.git"
		BARENAME="$1.git"
		if [ -d $BARE ]
		then
			cd $BARE
			git pull
			git repack -a
			IPFS="$(ak-ipfs-add .)"
			ak-ipfs-name-publish --key="$BARENAME" /ipfs/$IPFS
			echo "DONE"
		else
			echo "NO BARE TO UPDATE"
			echo "updating all..."
		fi
	else
		BARES="$(ls -1 $BAREDIR)"
		cd $BAREDIR
		for PROJECT in $BARES
		do
			cd "$PROJECT"
			git pull
			git repack -a
			IPFS="$(ak-ipfs-add .)"
			ak-ipfs-name-publish --key="$PROJECT" /ipfs/$IPFS
			cd $BAREDIR
		done
	fi
}

append-if-needed(){
	under="$1"
	file="$HOME/.arching-kaos/repos"
	lines="$(cat $file)"
	found="no"
	for line in $lines
	do
		if [ $found == "yes" ]
		then
			echo "found $found"
			break
		else
			if [ "$line" == "$under" ]
			then
				found="yes"
				echo "found $found"
				break
			fi
		fi
	done
	if [ $found == "no" ]
	then
		echo $under > $file
	fi
}


add(){
	PROJECT="$1"
	PROJECTDIR="$REPODIR/$PROJECT"
	BAREGITDIR="$BAREDIR/$PROJECT.git"
	if [ -d $PROJECTDIR ]
	then
		cd $HOME/bare
		git clone --bare $PROJECTDIR/.git
		if [ $? == 0 ]
		then
			cd $BAREGITDIR
			git repack -a
			IPFS="$(ak-ipfs-add .)"
			try=ak-ipfs-key-gen "$PROJECT.git"
			if [ $? == 0 ]
			then
				ak-ipfs-name-publish --key="$PROJECT.git" /ipfs/$IPFS
				printf '{"project":"%s.git","ipns":"%s"}' $PROJECT $try > data
				ak-pack_z_block "repos/add" $PWD/data			
				echo "Done"
			fi
		fi
	else
		echo "$PROJECT not a git repo"
	fi
}

index(){
	ak-ipfs-key-list-full | grep -e '\.git'
}
set-as-profile(){
	IPFS=$(ak-ipfs-add $REPOSTORE)
	if [ $? == 0 ]
	then
		profile set repositories $IPFS
	else
		echo error
	fi
}

publish(){
	if [ ! -z $1 ]
	then
		echo "Filtering for $1..."
		index | grep "$1" > $REPOSTORE
		set-as-profile
	else
		echo "Publishing all..."
		index > $REPOSTORE
		set-as-profile
	fi
}

usage(){
	echo "TODO"
    echo "index | add | publish | update"
	exit
}

if [ ! -z $1 ]
then
	case $1 in
		help) usage; exit;;
		index) index; exit;;
		add) add "$2"; exit;;
		publish) publish "$2"; exit;;
		update) update "$2"; exit;;
		*) echo "No command $1";usage; exit;;
	esac
else
	usage
fi