#!/bin/bash

if [[ -n "$(ls | grep -e '.editorconfig')" ]]; then
	echo "Wrong directory!" >&2
	exit 1
fi

rm -rf revision.h
mkdir -p src/simutrans
mkdir src/simutrans/tool
mkdir src/simutrans/world
mkdir src/simutrans/gui/components
mkdir src/Windows

svn add src

svn mv  squirrel src/
svn mv  makeobj src/

svn mv gui src/simutrans
svn mv obj src/simutrans

svn mv  dataobj descriptor display io music network player script sound sys tpl utils vehicle src/simutrans/

declare -a PATHREPLACE=("s|boden/wege/|obj/way/|")
svn mv  boden/wege/ src/simutrans/obj/way

PATHREPLACE+=("s|bauer/|builder/|")
svn mv  bauer src/simutrans/builder

PATHREPLACE+=("s|boden/|ground/|")
svn mv  boden src/simutrans/ground

PATHREPLACE+=("s|nettools/|nettool/|")
sed -i 's|#include "|#include "../|' nettools/*.{h,cc}
svn mv nettools src/nettool

# Additional reorganizations

PATHREPLACE+=("s|unicode\.cc|utils/unicode\.cc|" "s|unicode\.h|utils/unicode\.h|")
sed -i 's|#include "|#include "../|' unicode.{h,cc}
sed -i 's|#include "../utils/|#include "|' unicode.{h,cc}
svn mv unicode.{h,cc} src/simutrans/utils

PATHREPLACE+=("s|simdepot\.cc|obj/depot\.cc|" "s|simdepot\.h|obj/depot\.h|")
sed -i 's|#include "|#include "../|' simdepot.{h,cc}
sed -i 's|#include "../obj/|#include "|' simdepot.{h,cc}
svn mv simdepot.cc src/simutrans/obj/depot.cc
svn mv simdepot.h src/simutrans/obj/depot.h

PATHREPLACE+=("s|simmenu\.cc|tool/simmenu\.cc|" "s|simmenu\.h|tool/simmenu\.h|")
sed -i 's|#include "|#include "../|' simmenu.{h,cc}
svn mv  simmenu.{h,cc} src/simutrans/tool/

PATHREPLACE+=("s|simworld\.cc|world/simworld\.cc|" "s|simworld\.h|world/simworld\.h|")
sed -i 's|#include "|#include "../|' simworld.{h,cc}
svn mv simworld.{h,cc} src/simutrans/world/

PATHREPLACE+=("s|simplan\.cc|world/simplan\.cc|" "s|simplan\.h|world/simplan\.h|")
sed -i 's|#include "|#include "../|' simplan.{h,cc}
svn mv simplan.{h,cc} src/simutrans/world/

PATHREPLACE+=("s|simcity\.cc|world/simcity\.cc|" "s|simcity\.h|world/simcity\.h|")
sed -i 's|#include "|#include "../|' simcity.{h,cc}
svn mv simcity.{h,cc} src/simutrans/world/

find . -maxdepth 1 -type f -name "*.cc" -exec svn mv {} src/simutrans \;
find . -maxdepth 1 -type f -name "*.h" -exec svn mv {} src/simutrans \;

PATHREPLACE+=("s|finder/|world/|")
svn mv finder/*.{h,cc} src/simutrans/world
svn rm --force finder

PATHREPLACE+=("s|ifc/simtestdriver\.h|vehicle/simtestdriver\.h|" "s|ifc/sync_steppable\.h|obj/sync_steppable\.h|")
svn mv ifc/simtestdriver.h src/simutrans/vehicle/
svn mv ifc/sync_steppable.h src/simutrans/obj/
svn rm --force ifc

svn mv  simres.rc src/Windows
svn mv  Simutrans.manifest src/Windows
svn mv  nsis src/Windows

svn mv  OSX src
svn mv  android src

svn mv  scripts tools
svn mv  distribute.sh tools
svn mv  findversion.sh tools
svn mv  get_lang_files.* tools
svn mv  get_pak.* tools
svn mv  get_revision.* tools
svn mv  install-building-libs* tools
svn mv  revision.jse tools
svn mv  ../base.tab src
svn mv ../zipsrc.sh tools

svn mv ../patches src/

svn mv  *.ico src/simutrans
svn mv  simutrans.svg src/simutrans

find . -name '*_t.cc' -exec bash -c 'svn mv $0 ${0/_t\.cc/\.cc}' {} \;
find . -name '*_t.h' -exec bash -c 'svn mv $0 ${0/_t\.h/\.h}' {} \;

echo "Remove _t suffix from files"
# remove _t also in the include files
find . -type f "(" -name "*.cc" -o -name "*.h" -o -name "*mm" ")" -exec sed -i 's|_t\.h\"|\.h\"|' {} \;
sed -i 's|_t\.|\.|' cmake/SimutransSourceList.cmake
sed -i 's|_t\.|\.|' Simutrans-Main.vcxitems
find . -type f -name "Makefile" -exec  sed -E -i 's|_t\.|\.|' {} \;

# process accumulated path and name changes in include files
for pattern in "${PATHREPLACE[@]}"
do
	echo "Replacing $pattern"
	if ! [[ $pattern == *".cc|"* ]]; then
		echo replace in "includes"
		find . -type f "(" -name "*.cc" -o -name "*.h" -o -name "*mm" ")" -exec sed -i "$pattern" {} \;
	fi
	sed -i "$pattern"  cmake/SimutransSourceList.cmake
	mspattern=`echo $pattern | sed -E 's-/-\\\\-'`
	sed -i "$mspattern" Simutrans-Main.vcxitems
	find . -type f -name "Makefile" -exec  sed -E -i "$pattern" {} \;
done
sed -i 's|wege/|../obj/way/|' src/simutrans/ground/*.{h,cc}
sed -i 's|../world/||' src/simutrans/world/*.{h,cc}

sed -i 's|^\s*|\t\tsrc/simutrans/|' cmake/SimutransSourceList.cmake
sed -i 's|Directory)|Directory)src\\simutrans\\|' Simutrans-Main.vcxitems
sed -i 's|ClCompile Include=\"|ClCompile Include=\"src\\simutrans\\|' Simutrans*.vcxproj
sed -i 's|revision.jse|tools\\revision.jse|' Simutrans*.vcxproj
sed -i 's|revision\.h\"|src\\\\simutrans\\\\revision\.h\"|' tools/revision.jse

sed -i 's|SOURCES += |SOURCES += src/simutrans/|' Makefile

# CmakeList and Makefiles will need some hand editing.
# TODO Update location of paksetinfo.h in get_pak.sh

# TODO fix distribution and github actions

# prissi prefernces
# TODO add file prefixes to some files (like obj_ for objects)
# TODO rename xxx_vehicle.cc to vehicle_xxx.cc and so on
