# ⭐️ Install NVM
curl https://raw.githubusercontent.com/creationix/nvm/master/install.sh | bash
source ~/.bashrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion



# ⭐️ Install Node
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install 18.7.0
nvm use 18.7.0
npm install -g npm@9.3.0



# ⭐️ Create project and install API Maker in it.
nvm use 18
mkdir -p ~/projects/sava_api_maker
mkdir -p ~/logs
cd ~/projects/sava_api_maker
npm init -y
npm install @sava-info-systems/api-maker@latest
npm install oracledb@5.5.0

# ⭐️ Terminal 1 = Print this help script
cat ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/installation_steps.sh




# ⭐️ Terminal 2 = Continue installation below steps
# ⭐ Validate system for installation
hostnamectl | grep "Ubuntu 22.04" && echo "✅ OS supported"
cat /proc/cpuinfo | grep avx && echo "✅ AVX supported"
umask | grep 0022 && echo "✅ Root user provided"
    # lsb_release -a | grep Description
    # cat etc/os-release




# ⭐️ Install Docker
apt-get remove docker docker-engine docker.io containerd runc
apt-get update

apt-get install -y ca-certificates=20211016ubuntu0.22.04.1
apt-get install -y curl=7.81.0-1ubuntu1.7
apt-get install -y gnupg=2.2.27-3ubuntu2.1
apt-get install -y lsb-release=11.1.0ubuntu4

mkdir -p /etc/apt/keyrings
rm -rf /etc/apt/keyrings/docker.gpg
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor --batch --yes -o /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

chmod a+r /etc/apt/keyrings/docker.gpg
apt-get update

apt-get install -y docker-ce=5:23.0.1-1~ubuntu.22.04~jammy
apt-get install -y docker-ce-cli=5:23.0.1-1~ubuntu.22.04~jammy
apt-get install -y containerd.io=1.6.18-1
apt-get install -y docker-compose-plugin=2.16.0-1~ubuntu.22.04~jammy
apt-get install -y docker-compose=1.29.2-1


# /root/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker


# ⭐️ todo: Modify your config from ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment


# ⭐️ Start MongoDB Container
/usr/bin/docker-compose --project-name api_maker -f ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/config/mongodb_api_maker.yml up -d
# Stop MongoDB Container
# /usr/bin/docker-compose --project-name api_maker -f ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/config/mongodb_api_maker.yml stop


docker container ls # List all containers
# docker logs CONTAINER_ID
docker exec -it CONTAINER_ID /bin/bash # 👈 Check this value #fill CONTAINER_ID from above command
mongosh -u mongo_user -p SLUFZ5ufe_hAzyRd3aLA # 👈 Check this value __mongo_user__ & __mongo_pass__
# ✅ todo: execute commands from mongo_script.js file
exit # Go out from mongodb shell
exit # Go out from docker container shell




# ⭐️ Start Redis Container
/usr/bin/docker-compose --project-name api_maker -f ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/config/redis_api_maker.yml up -d
# Stop Redis Container
# /usr/bin/docker-compose --project-name api_maker -f ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/config/redis_api_maker.yml stop




# ⭐️ Set oracle client in path
apt-get -yq install unzip
apt-get -yq install make

# Install oracledb prerequisites
rm -rf /opt/oracle
mkdir -p /opt/oracle
cd /opt/oracle
wget -q https://images.apimaker.dev/prod/am-cloud/binaries/oracle-clients/21.8.0/instantclient-basic-linuxx64.zip
unzip instantclient-basic-linuxx64.zip
apt-get install -y libaio1=0.3.112-13build1
sudo sh -c "echo /opt/oracle/instantclient > /etc/ld.so.conf.d/oracle-instantclient.conf"
sudo ldconfig




# ⭐️ todo: set values in .env file
cd ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker
# cp ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/assets-deployment/.env ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker
# todo: set IP address in .env file




# ⭐️ set .env settings in frontend
cd ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker
npm run set-env-in-fe
# Install pm2
~/.nvm/versions/node/v18.7.0/bin/npm install -g pm2@5.2.2




# ⭐️ Start API Maker backend
cd ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker
export PATH=~/.nvm/versions/node/v18.7.0/bin:/opt/oracle/instantclient:$PATH


# Delete process and start new process.
~/.nvm/versions/node/v18.7.0/bin/pm2 delete api_maker_be
~/.nvm/versions/node/v18.7.0/bin/pm2 -a start main.js --node-args="--max-old-space-size=1500" --name api_maker_be --log "~/logs/api_maker_be.txt" --log-date-format 'DD-MM-YYYY HH:mm:ss Z'




# ⭐️ Start API Maker frontend
export PATH=~/.nvm/versions/node/v18.7.0/bin:$PATH
~/.nvm/versions/node/v18.7.0/bin/pm2 delete api_maker_fe

# Serve content.
cd ~/projects/sava_api_maker/node_modules/@sava-info-systems/api-maker/dist
~/.nvm/versions/node/v18.7.0/bin/pm2 serve --spa --port 4626 --name api_maker_fe --log "~/logs/api_maker_fe.txt"




# ⭐️ Automatically start processes on server restart commands
export PATH=/root/.nvm/versions/node/v18.7.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
~/.nvm/versions/node/v18.7.0/bin/pm2 startup
systemctl enable pm2-root
~/.nvm/versions/node/v18.7.0/bin/pm2 save






# ⭐️ ======================= API Maker default users =========================
# admin@admin.com
# Admin_123456789

# root@root.com
# R00t_123456789



# ⭐️ ======================= Some Utility commands =========================



# Uninstall tar command
tar -xvf v1.0.0_fe.tar
