#!/bin/zsh

host=syu.is
name=${host%%.*}
domain=${host##*.}

d=${0:a:h}
dh=${0:a:h:h}

git_plc=https://github.com/did-method-plc/did-method-plc
git_bgs=https://github.com/bluesky-social/indigo
git_atp=https://github.com/bluesky-social/atproto
git_web=https://github.com/bluesky-social/social-app
git_fee=https://github.com/bluesky-social/feed-generator

run_repos_dl() {
	mkdir -p $d/repos
	cd $d/repos
	if [ ! -d $d/repos/did-method-plc ];then
		git clone $git_plc 
	fi
	if [ ! -d $d/repos/indigo ];then
		git clone $git_bgs
	fi
	if [ ! -d $d/repos/atproto ];then
		git clone $git_atp
	fi
	if [ ! -d $d/repos/social-app ];then
		git clone $git_web
	fi
	if [ ! -d $d/repos/feed-generator ];then
		git clone $git_fee
		cp -rf $d/docker/feed/Dockerfile $d/repos/feed-generator/
	fi
}

run_repos_dl

run_env() {

b="ADMIN_PASSWORD
MODERATOR_PASSWORD
TRIAGE_PASSWORD
SERVICE_SIGNING_KEY
IMG_URI_SALT
IMG_URI_KEY
OZONE_ADMIN_PASSWORD
OZONE_MODERATOR_PASSWORD
OZONE_TRIAGE_PASSWORD
OZONE_SIGNING_KEY_HEX
BGS_ADMIN_KEY
PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX
PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX"

	for ((i=1;i<=`echo $b|wc -l`;i++))
	do
		f=`echo $b|awk "NR==$i"`
		o=`openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32`
		echo $f=$o
		export $f=$o
	done
	
	b="PDS_JWT_SECRET
	PDS_ADMIN_PASSWORD"
	
	for ((i=1;i<=`echo $b|wc -l`;i++))
	do
		f=`echo $b|awk "NR==$i"`
		o=`openssl rand --hex 16`
		echo $f=$o
		export $f=$o
	done
}

run_env_write() {
	echo MODERATION_PUSH_URL=https://admin:${OZONE_ADMIN_PASSWORD}@mod.${host} >> $d/.env/bsky
	echo MODERATION_PUSH_URL=https://admin:${OZONE_ADMIN_PASSWORD}@mod.${host} >> $d/.env/mod
	echo ADMIN_PASSWORD=$ADMIN_PASSWORD >> $d/.env/bsky
	echo MODERATOR_PASSWORD=$MODERATOR_PASSWORD >> $d/.env/bsky
	echo TRIAGE_PASSWORD=$TRIAGE_PASSWORD >> $d/.env/bsky
	echo SERVICE_SIGNING_KEY=$SERVICE_SIGNING_KEY >> $d/.env/bsky
	echo IMG_URI_SALT=$IMG_URI_SALT >> $d/.env/bsky
	echo IMG_URI_KEY=$IMG_URI_KEY >> $d/.env/bsky
	echo OZONE_ADMIN_PASSWORD=$OZONE_ADMIN_PASSWORD >> $d/.env/mod
	echo OZONE_MODERATOR_PASSWORD=$OZONE_MODERATOR_PASSWORD >> $d/.env/mod
	echo OZONE_TRIAGE_PASSWORD=$OZONE_TRIAGE_PASSWORD >> $d/.env/mod
	echo OZONE_SIGNING_KEY_HEX=$OZONE_SIGNING_KEY_HEX >> $d/.env/mod
	echo BGS_ADMIN_KEY=$BGS_ADMIN_KEY >> $d/.env/bgs
	echo PDS_JWT_SECRET=$PDS_JWT_SECRET >> $d/.env/pds
	echo PDS_ADMIN_PASSWORD=$PDS_ADMIN_PASSWORD >> $d/.env/pds
	echo PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX=$PDS_REPO_SIGNING_KEY_K256_PRIVATE_KEY_HEX >> $d/.env/pds
	echo PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=$PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX >> $d/.env/pds
}

run_web() {
	cd $d/repos/social-app/src
	if [ -n "`grep -R bsky.social .`" ];then
		for f (`grep -R bsky.social . |cut -d : -f 1`) sed -i -e "s/bsky\.social/${name}\.${domain}/g" $f
	fi
	#if [ -n "`grep -R bsky.app .`" ];then
	#	for f (`grep -R bsky.app . |cut -d : -f 1`) sed -i -e "s/bsky\.app/web\.${name}\.${domain}/g" $f
	#fi
	if [ -n "`grep -R "isSandbox: false" .`" ];then
		for f (`grep -R "isSandbox: false" . |cut -d : -f 1`) sed -i -e "s/isSandbox: false/isSandbox: true/g" $f
	fi
	if [ -n "`grep -R SANDBOX .`" ];then
		for f (`grep -R SANDBOX . |cut -d : -f 1`) sed -i -e "s/SANDBOX/${name}\.${domain}/g" $f
	fi
	f=./view/com/modals/ServerInput.tsx
	if [ -n "`grep -R Bluesky.Social $f`" ] && [ -f $f ];then
		sed -i -e "s/Bluesky\.Social/${name}\.${domain}/g" $f
	fi
	f=./state/queries/preferences/moderation.ts
	if [ -n "`grep -R 'Bluesky Social' $f`" ] && [ -f $f ];then
		sed -i -e "s/Bluesky Social/${name}\.${domain}/g" $f
	fi
	f=./view/com/auth/create/Step1.tsx
	if [ -n "`grep -R 'Bluesky' $f`" ] && [ -f $f ];then
		sed -i -e "s/Bluesky/${name}\.${domain}/g" $f
	fi
	f=./lib/strings/url-helpers.ts
	if [ -n "`grep -R 'Bluesky Social' $f`" ] && [ -f $f ];then
		sed -i -e "s/Bluesky Social/${name}\.${domain}/g" $f
	fi
	f=./view/icons/Logotype.tsx
	o=$d/icons/Logotype.tsx
	if [ -n "`grep -R 'M8.478 6.252c1.503.538 2.3 1.7' $f`" ] && [ -f $f ]  && [ -f $o ];then
		cp -rf $o $f
	fi
}

run_web_icon_dl() {
	curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/main/src/view/icons/Logotype.tsx -o $d/repos/social-app/src/view/icons/Logotype.tsx
	cp -rf $d/repos/social-app/src/view/icons/Logotype.tsx $d/icons/
}

run_web_app() {
	cd $d/repos/social-app/src
	f=./lib/analytics/analytics.tsx
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s#https://api.events.bsky.app/v1#https://bsky.syu.is/v1#g" $f
	fi
	f=./lib/analytics/analytics.web.tsx
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s#api.events.bsky.app/v1#bsky.syu.is/v1#g" $f
	fi
	f=./lib/notifications/notifications.ts
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s/bsky\.app/${name}\.${domain}/g" $f
	fi
	f=./lib/constants.ts
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s/bsky\.app/${name}\.${domain}/g" $f
	fi
	f=./lib/strings/url-helpers.ts
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s/bsky\.app/${name}\.${domain}/g" $f
	fi
	f=./view/com/modals/ServerInput.tsx
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s/bsky\.app/${name}\.${domain}/g" $f
	fi
	f=./view/com/modals/ContentFilteringSettings.tsx
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s/bsky\.app/${name}\.${domain}/g" $f
	fi
	f=./state/queries/index.ts
	if [ -n "`grep -R 'bsky.app' $f`" ] && [ -f $f ];then
		sed -i -e "s#https://public.api.bsky.app#https://api.syu.is#g" $f
	fi
	f=./App.native.tsx
	if [ -n "`grep -R 'sentry' $f`" ] && [ -f $f ];then
		sed -i -e "s#import 'lib/sentry'#//import 'lib/sentry'#g" $f
		sed -i -e "s#import 'lib/sentry'#//import 'lib/sentry'#g" ./App.web.tsx
	fi
}

run_update() {
		cd $d/repos/did-method-plc;git pull
		cd $d/repos/indigo;git pull
		cd $d/repos/atproto;git pull
		cd $d/repos/feed-generator;git pull
		rm -rf $d/repos/social-app;
		if [ ! -d $d/repos/social-app ];then
			cd $d/repos
			git clone $git_web
			run_web
			run_web_app
		fi
		cd $d
		echo ----------------------------
		echo cd $d
		echo 'docker compose build && docker compose up -d'
}

web_write() {
	dt=$d/repos/social-app/src
	cd $dt
	grep -R bsky.social .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.social/syu.is/g"
	grep -R bsky.app .|cut -d : -f 1|sort -u|xargs sed -i "s/bsky.app/web.syu.is/g"
	grep -R public.api.syu.is ./lib/constants.ts | cut -d : -f 1|sort -u|xargs sed -i "s/public.api/bsky/g"

	f=$dt/view/icons/Logotype.tsx
	o=$d/icons/Logotype.tsx
	cp -rf $o $f

	#curl -sL https://raw.githubusercontent.com/bluesky-social/social-app/refs/heads/main/src/view/com/util/UserAvatar.tsx -o $f
	f=$dt/view/com/util/UserAvatar.tsx
	sed -i $t "s#/img/avatar/plain/#https://cdn.bsky.app/img/avatar/plain/#g" $f
	sed -i $t "s#/img/avatar_thumbnail/plain/#https://bsky.syu.is/img/avatar/plain/#g" $f
	sed -i $t "s#source={{uri: avatar}}#source={{ uri: hackModifyThumbnailPath(avatar, 1 > 0), }}#g" $f
}

case $1 in
	run-env-write)
		run_env
		run_env_write
		;;
	web-app)
		run_web_icon_dl
		run_web
		run_web_app
		;;
	update|up)
		run_update
		;;
	web)
		web_write
		;;
esac