#!/bin/bash

# funcs (mac doesnt have realpath)
realpath() {
    [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}"
}

echo "$1 $2 $3"

unameOut="$(uname -s)"
case "${unameOut}" in
    Linux*)     machine=Linux;;
    Darwin*)    machine=Mac;;
    CYGWIN*)    machine=Cygwin;;
    MINGW*)     machine=MinGw;;
    MSYS*)      machine=MinGw;;
    *)          machine="UNKNOWN:${unameOut}"
esac
   

# install pyenv?

echo "
                 ###   ##   #  #  ###    ##   ###                
                #     #  #  ####  #  #  #  #  #  #               
                #     #  #  ####  ###   #  #  #  #               
                #     #  #  #  #  # #   ####  #  #               
                 ###   ##   #  #  #  #  #  #  ###                

                                                           
installing...

"            


if [ "$machine" = "MinGw" ] || [ "$machine" = "Cygwin" ]
then
    echo -e "\nSorry, but Windows is not yet supported."
    echo -e "\nIf you are a developer, please lend a hand to support Windows."
    echo "The current attempt at a windows installation is located here:"
    echo "https://github.com/ComradOrg/Comrad/blob/master/script/install-windows.sh"
  
    exit 1
fi



###
# Create paths
######


echo '
1) setting up folders...

'
# install dir?
echo "Where should comrad live on your device?"
path_comrad_default="`realpath ~/comrad`"

if [ "$1" = "-n" ]
then
    read -p "[$path_comrad_default] " path_comrad
else
    path_comrad=$path_comrad_default
fi


if [ -z "$path_comrad" ]
then
    path_comrad=$path_comrad_default
fi

if [ ! -d "$path_comrad" ]
then
    mkdir -p $path_comrad
    echo "created $path_comrad"
fi

path_lib="$path_comrad/lib"
if [ ! -d "$path_lib" ]
then
    mkdir -p $path_lib
    echo "created $path_lib"
fi
   

path_repo="$path_comrad/code"
path_bin="$path_repo/bin"
# if [ ! -d "$path_bin" ]
# then
#     mkdir -p $path_bin
#     echo "created $path_bin"
# fi


path_themis="$path_lib/themis/build"
export LD_LIBRARY_PATH="$path_themis:$LD_LIBRARY_PATH"





echo '
2) configuring OS environment...

'

echo "$machine detected."    




#### 
# Package manager setups
# 

# windows
if [ "$machine" = "MinGw" ]
then
    echo "Installing base development packages"
    pacman -S curl wget unzip gcc make openssl-devel git
fi

# mac
if [ "$machine" = "Mac" ]
then
    if ! command -v brew &> /dev/null
    then
        echo "Installing homebrew..."
        cd "$path_lib"
        mkdir homebrew && curl -L https://github.com/Homebrew/brew/tarball/master | tar xz --strip 1 -C homebrew
    fi

    if ! command -v git &> /dev/null
    then
        echo "Installing git with brew..."
        brew install git
    fi
fi

# linux
if [ "$machine" = "Linux" ]
then
    if ! command -v git &> /dev/null
    then
        echo "Installing git with apt..."
        sudo apt install git
    fi
fi










### Downloading via git!

echo '

2) downloading Comrad...

'
# if exists, pull
if [ -d "$path_repo" ]
then 
    cd $path_repo
    git pull
else
    cd $path_comrad
    git clone https://github.com/ComradOrg/Comrad.git
    mv Comrad code
fi






echo '

4) setting up python miniconda...

# '



#################
##  MINICONDA  ##
#################


cd $path_comrad
path_conda="$path_comrad/lib/miniconda3"


if [ "$machine" = "Linux" ]
then
    if [ ! -f "miniconda.sh" ]
    then
        echo "downloading miniconda..."
        curl https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-Linux-x86_64.sh -o miniconda.sh
        chmod +x miniconda.sh
    fi
    ./miniconda.sh -b -f -p "$path_conda"
    #rm miniconda.sh
    export PATH="$path_conda/bin:$PATH"

    # sudo apt install zbar-tools
fi

# mac

if [ "$machine" = "Mac" ]
then
    if [ ! -f "miniconda.sh" ]
    then
        echo "downloading miniconda..."
        curl https://repo.anaconda.com/miniconda/Miniconda3-py37_4.8.3-MacOSX-x86_64.sh -o miniconda.sh
        chmod +x miniconda.sh
    fi
    ./miniconda.sh -b -f -p "$path_conda"
    export PATH="$path_conda/bin:$PATH"

    # brew install zbar
fi



echo "path_conda = $path_conda"
echo "conda exec is `which conda`"
source "$path_conda/etc/profile.d/conda.sh"
echo "conda exec is `which conda`"

#$condaexec





############################################################


echo '

5) creating virtual environment...

'
path_venv="$path_repo/venv"
echo "Now using python (t1): `which python`"

conda config --add channels conda-forge
conda create -y -p "$path_venv" python=3.7 cartopy pip virtualenv rtree wxpython pandas numpy scipy pyzbar
source "$path_conda/etc/profile.d/conda.sh"

conda activate "$path_venv"

echo "Now using python (t2): `which python`"
python -m pip install -U setuptools




###########################################################

echo '

Install python requirements

'

cd $path_repo
python -m pip install -r requirements.txt



#########################################################################

if [ "$machine" = "Mac" ]
then
    echo "Installing Mac native GUI bridge"
    python -m pip install git+https://github.com/kivy/pyobjus
fi


#######################################

echo '

Installing Themis, cryptography backend...

'


if [ "$machine" = "Mac" ]
then
    echo 'installing themis with brew'
    /usr/local/bin/brew tap cossacklabs/tap
    /usr/local/bin/brew install libthemis
fi

if [ "$machine" = "Linux" ]
then
    REQUIRED_PKG="libssl-dev"
    PKG_OK=$(dpkg-query -W --showformat='${Status}\n' $REQUIRED_PKG|grep "install ok installed")
    echo "Checking for prerequisite $REQUIRED_PKG: $PKG_OK"
    if [ "" = "$PKG_OK" ]; then
        echo "No $REQUIRED_PKG. Setting up $REQUIRED_PKG. This needs sudo."
        sudo apt-get --yes install $REQUIRED_PKG 
        # mkdir -p "$path_lib/var/lib/dpkg"
        # touch "$path_lib/var/lib/dpkg/lock"
        # apt-get download libssl-dev; dpkg -i --force-not-root --root=$path_lib libssl-dev.deb
    fi

    echo 'Building Themis...'
    cd "$path_lib"
    if [ ! -d "$themis" ]
    then
        curl https://codeload.github.com/cossacklabs/themis/zip/master -o themis.zip
        unzip -q -o themis.zip
        mv themis-master themis
    fi
    cd themis
    make
fi





echo '

Completing...

'

commands_app="
    source $path_conda/etc/profile.d/conda.sh\n
    export PATH=\"$path_conda/bin:\$PATH\"\n
    conda activate $path_venv\n
    python -m pip install -r $path_repo/requirements.txt\n
    python $path_repo/comrad/app/main.py\n
"



export PATH="$path_bin:$PATH"
bashline="export PATH=\"$path_bin:\$PATH\"     # comrad installation"
bashfn="`realpath ~/.bashrc`"

# add to bashrc?
if grep -Fxq "$bashline" "$bashfn"
then
    # code if found
    echo "setting already in $bashfn: $bashline"
else
    # code if not found
    echo "$bashline" >> "$bashfn"
fi


echo -e "Installation successful!"

if [ "$machine" = "Mac" ]
then
    cd /Applications
    unzip -q -o "$path_bin/Comrad.app.zip"
    echo "You may run the app by looking for 'Comrad.app' in your /Applications folder."
else
    echo -e "
You can run Comrad with:


## For the GUI interface:

    comrad-app

or:

    ~/comrad/code/bin/comrad-app


## For the terminal client:

    comrad-cli

or:

    ~/comrad/code/bin/comrad-cli

"
fi














# run?

#$path_bin/comrad-app
