#!/bin/bash

# Update and clear screen
sudo apt update && clear

# Get public IP address
get_public_ip=$(wget -T 10 -t 1 -4qO- "http://ip1.dynupdate.no-ip.com/" || curl -m 10 -4Ls "http://ip1.dynupdate.no-ip.com/" | grep -m 1 -oE '^[0-9]{1,3}(\.[0-9]{1,3}){3}$')
read -p "Public IPv4 address / hostname [$get_public_ip]: " public_ip
until [[ -n "$get_public_ip" || -n "$public_ip" ]]; do
    echo "Invalid input."
    read -p "Public IPv4 address / hostname: " public_ip
done
[[ -z "$public_ip" ]] && public_ip="$get_public_ip"
clear

# Update and clear screen
sudo apt update
sudo apt upgrade -y
clear




# Create admin user
mongosh <<EOF
use admin
db.auth("admin", "CXU3D1J83361")
db.createUser({user:"zreeladmin", pwd:"dbadmin123", roles: [{ role: "userAdminAnyDatabase", db: "admin" }, { role: "readWrite", db: "zreel" }]})
exit
EOF

# Enable authentication in MongoDB
sudo sed -i '/#security:/a\security:\n  authorization: enabled' /etc/mongod.conf
sudo sed -i "s/bindIp: 127.0.0.1/bindIp: 127.0.0.1,$public_ip/" /etc/mongod.conf
sudo systemctl restart mongod

# Install backend dependencies
echo "
################################################
#                INSTALL BACKEND               #
################################################
"
cd /var/www/html/E4ShortieApp/E4_Shortie/admin/backend || exit
npm install
cat > .env << EOF
#Port
PORT = 5000

#Project Name
projectName = ${app_name}

#Secret key for jwt
JWT_SECRET = ${shared_jwt_secret}

#Gmail credentials for send email
EMAIL = kodebookapp@gmail.com
APP_PASSWORD = nohwrpybgiuhqjfy 

#Server URL
baseURL = https://$your_domain/

#Secret key for API
secretKey = ${shared_secret_key}

#Mongodb string
MongoDb_Connection_String = mongodb://admin:dbadmin123@${public_ip}:27017/${mongodbUser_name}?authSource=admin
EOF

cd /var/www/html/E4ShortieApp/E4_Shortie/admin/backend || exit
pm2 start index.js --name backend
pm2 status
node -v
pm2 restart backend --interpreter $(which node)

# Install frontend dependencies and build
echo "
################################################
#                INSTALL FRONTEND              #
################################################
"
cd /var/www/html/E4ShortieApp/E4_Shortie/admin/frontend/src/util || exit
cat > config.ts << EOF
export const baseURL: string = "https://$your_domain/";
export const secretKey: string = "$shared_secret_key";
export const projectName: string = "$app_name";
EOF

cd /var/www || exit
#sudo mkdir -p "$mongodbUser_name/frontend"
#sudo mv /var/www/html/E4ShortieApp/E4_Shortie/admin/frontend/* /var/www/$mongodbUser_name/frontend/
export PATH="$PATH:$HOME/.nvm/versions/node/v18.20.2/bin"
source ~/.bashrc
cd /var/www/html/E4ShortieApp/E4_Shortie/admin/frontend/ || exit
npm install
npm run build

# Start frontend with PM2
pm2 start npm --name "frontend" -- start
pm2 restart frontend --interpreter $(which node)

echo "
################################################
#                CONGRATULATIONS!              #
################################################
Server setup is complete.
1. baseURL : https://$your_domain/
2. Secret key : $shared_secret_key
3. MONGODB_CONNECTION_STRING: "mongodb://admin:dbadmin123@${public_ip}:27017/${mongodbUser_name}?authSource=admin"
"
