#!/bin/bash

# INIT
MACHINE_TYPE=`uname -m`
BASE_DIR=$(pwd)
PYTHON_VERSION=2.7.15
PYQT_VERSION=4-4.11.4-gpl-Py2.7-Qt4.8.7
OPENSSL_VERSION=1_0_2t
DIRECTORY32BIT=SoftwareDownloads32bit
DIRECTORY64BIT=SoftwareDownloads64bit

if [ ${MACHINE_TYPE} == 'x86_64' ]; then
	if [ ! -d "$DIRECTORY64BIT" ]; then
		mkdir SoftwareDownloads64bit
		cd SoftwareDownloads64bit
	else
		echo "Directory already exists"
		cd SoftwareDownloads64bit
	fi
else
	if [ ! -d "$DIRECTORY32BIT" ]; then
		mkdir SoftwareDownloads32bit
		cd SoftwareDownloads32bit
	else
		echo "Directory 32 bit alrready exists"
		cd SoftwareDownloads32bit
	fi
fi
#Functions
function install_wine {

	
	wget -nc https://dl.winehq.org/wine-builds/Release.key  --no-check-certificate
	sudo apt-key add Release.key
	sudo apt-add-repository 'https://dl.winehq.org/wine-builds/ubuntu/'
	sudo apt-get -y update
	sudo apt-get -y install wine1.8 winetricks
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		sudo apt-get -y install wine64-development
		env WINEPREFIX=$HOME/.wine64 WINEARCH=win64 winecfg
		WINE="env WINEPREFIX=$HOME/.wine64 wine"
		export WINEPREFIX
		
	else
		sudo apt-get -y install wine32-development
		env WINEPREFIX=$HOME/.wine32 WINEARCH=win32 winecfg
		WINE="env WINEPREFIX=$HOME/.wine32 wine"
		export WINEPREFIX
		
	fi
}

function install_python(){
	echo "Download Python2.7"
	
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		# For 64 bit machine
		wget -nc wget http://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}.amd64.msi --no-check-certificate
		echo "Install Python2.7 for 64 bit"
		$WINE msiexec -i python-${PYTHON_VERSION}.amd64.msi /q /norestart
		
		wget -nc https://download.microsoft.com/download/d/2/4/d242c3fb-da5a-4542-ad66-f9661d0a8d19/vcredist_x64.exe --no-check-certificate
		$WINE vcredist_x64.exe /q /norestart
		echo "Installed vcredist for 64 bit"
		$WINE pip install --upgrade pip

	else
		# For 32 bit machine
		wget -nc https://www.python.org/ftp/python/${PYTHON_VERSION}/python-${PYTHON_VERSION}.msi --no-check-certificate
		echo "Install Python2.7 for 32 bit"
		$WINE msiexec -i python-${PYTHON_VERSION}.msi /q /norestart

		echo "Installing vc_redist for 32 bit "
		wget -nc https://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/vcredist_x86.exe --no-check-certificate
		$WINE vcredist_x86.exe /q /norestart
		#insatlled msvcr120.dll for 32 bit system
		wget -nc http://www.dll-found.com/zip/m/msvcr120.dll.zip --no-check-certificate
		unzip msvcr120.dll.zip
		sudo cp msvcr120.dll $HOME/.wine32/drive_c/windows/system32/
		$WINE pip install --upgrade pip

	fi
}

function install_pyqt(){
	
	echo "Download PyQT"
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		# For 64 bit machine
		wget -nc --content-disposition  https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe?raw=true --no-check-certificate 
		$WINE PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe /q /norestart /silent /verysiling /sp- /suppressmsgboxes
	else
		# For 32 bit machine
		wget -nc --content-disposition https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe?raw=true --no-check-certificate
		$WINE PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x32.exe /q /norestart /silent /verysiling /sp- /suppressmsgboxes
	fi
}

function install_openssl(){
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		wget -nc --content-disposition https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/Win64OpenSSL-${OPENSSL_VERSION}.exe?raw=true --no-check-certificate
		$WINE Win64OpenSSL-${OPENSSL_VERSION}.exe  /q /norestart /silent /verysiling /sp- /suppressmsgboxes

	else
		wget -nc --content-disposition https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/Win32OpenSSL-${OPENSSL_VERSION}.exe?raw=true --no-check-certificate
		$WINE Win32OpenSSL-${OPENSSL_VERSION}.exe  /q /norestart /silent /verysiling /sp- /suppressmsgboxes
		echo "Install PyInstaller 32 bit"
	fi
}

function install_pyinstaller()
{
	$WINE pip install pyinstaller
	echo "Install PyInstaller"
	echo "Install Pyopencl"
	
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		wget -nc https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/pyopencl-2015.1-cp27-none-win_amd64.whl --no-check-certificate
		$WINE pip install pyopencl-2015.1-cp27-none-win_amd64.whl
		$WINE pip install msgpack-python
		
	else
		wget -nc --content-disposition https://github.com/Bitmessage/ThirdPartyLibraries/blob/master/pyopencl-2015.1-cp27-none-win_amd64one-win32.whl?raw=true --no-check-certificate
		$WINE pip install msgpack-python
		$WINE pip install pyopencl-2015.1-cp27-none-win32.whl
	fi
	echo "Install Message Pack"
	
}


function build_dll(){
	cd $BASE_DIR
	rm -rf master.zip
	rm -rf PyBitmessage
	git clone https://github.com/Bitmessage/PyBitmessage.git
	cd PyBitmessage/src/bitmsghash
	if [ ${MACHINE_TYPE} == 'x86_64' ]; then
		# Do stuff for 64 bit machine
		echo "Install MinGW"
		sudo apt-get -y install mingw-w64
		echo "Create dll"
		x86_64-w64-mingw32-g++ -D_WIN32 -Wall -O3 -march=native -I$HOME/.wine64/drive_c/OpenSSL-Win64/include -I/usr/x86_64-w64-mingw32/include -L$HOME/.wine64/drive_c/OpenSSL-Win64/lib -c 	bitmsghash.cpp
		x86_64-w64-mingw32-g++ -static-libgcc -shared bitmsghash.o -D_WIN32 -O3 -march=native  -I$HOME/.wine64/drive_c/OpenSSL-Win64/include -L$HOME/.wine64/drive_c/OpenSSL-Win64 -L/usr/lib/x86_64-linux-gnu/wine -fPIC -shared -lcrypt32 -leay32 -lwsock32 -o bitmsghash64.dll -Wl,--out-implib,bitmsghash.a
		echo "DLL generated successfully "
		cd ..
		cp -R bitmsghash ../../../src/
		cd ../../../
		cd packages/pyinstaller/
		env WINEPREFIX=$HOME/.wine64 wine pyinstaller bitmessagemain.spec
	else
		echo "Install MinGW for 32 bit"
		sudo apt-get install mingw-w64
		echo "Create dll"
		
		
		i686-w64-mingw32-g++ -D_WIN32 -Wall -m32 -O3 -march=native   -I$HOME/.wine32/drive_c/OpenSSL-Win32/include -I/usr/i686-w64-mingw32/include  -L$HOME/.wine32/drive_c/OpenSSL-Win32/lib  -c 	bitmsghash.cpp
		i686-w64-mingw32-g++ -static-libgcc -shared bitmsghash.o -D_WIN32 -O3 -march=native    -I$HOME/.wine32/drive_c/OpenSSL-Win32/include    -L$HOME/.wine32/drive_c/OpenSSL-Win32/lib/MinGW -fPIC -shared -lcrypt32 -leay32 -lwsock32  -o bitmsghash32.dll  -Wl,--out-implib,bitmsghash.a 
		cd ..
		cp -R bitmsghash ../../../src/
		cd ../../../
		cd packages/pyinstaller/
		env WINEPREFIX=$HOME/.wine32 wine pyinstaller bitmessagemain.spec
	fi
}


install_wine
install_python
install_pyqt
install_openssl
install_pyinstaller
build_dll