#!/bin/bash

# Script to set up the App after rebooting

# Exit on error, unset variable usage, and error in a pipeline
set -euo pipefail

# Define color variables
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No color

# Function to print messages in color
info() { echo -e "${BLUE}[INFO]${NC} $1"; }
success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; }

# Check for root privileges
if [[ "$EUID" -ne 0 ]]; then
    error "This script must be run as root. Use 'sudo ./installation.sh'"
fi
REPO_DIR="/var/www/nebuleair_pro_4g"
#set up the RTC
info "Set up the RTC"
/usr/bin/python3 /var/www/nebuleair_pro_4g/RTC/set_with_NTP.py

#Wake up SARA
info "Wake Up SARA"
pinctrl set 16 op
pinctrl set 16 dh

info "Waiting for SARA to wake up..."
for i in {1..8}; do
  echo -ne "  $i/8 seconds\r"
  sleep 1
done
echo -e "\n"

#Check SARA connection (ATI)
info "Check SARA connection (ATI)"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 ATI 2

sleep 1

#set up SARA R4 APN
#info "Set up Monogoto APN"
#/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara_setAPN.py ttyAMA2 data.mono 2

#activate blue network led on the SARA R4
info "Activate blue LED"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+UGPIOC=16,2 2

sleep 1

#get SIM card number
info "Get SIM card number"
/usr/bin/python3 /var/www/nebuleair_pro_4g/SARA/sara.py ttyAMA2 AT+CCID? 2

#Connect to network
#info "Connect SARA R4 to network"
#python3 /var/www/nebuleair_pro_4g/SARA/sara_connectNetwork.py ttyAMA2 20810 60

#Need to create the two service
# 1. start the scripts to set-up the services
# 2. rtc_save_to_db

#1. set-up the services (SARA, NPM, BME280, etc)
info "Setting up systemd services..."
    
if [[ -f "$REPO_DIR/services/setup_services.sh" ]]; then
    sudo chmod +x "$REPO_DIR/services/setup_services.sh"
    sudo "$REPO_DIR/services/setup_services.sh" || warning "Failed to set up systemd services"
    success "Systemd services set up successfully."
else
    warning "Systemd services setup script not found."
fi

#2. Add rtc_save_to_db.service
SERVICE_FILE_2="/etc/systemd/system/rtc_save_to_db.service"
info "Setting up systemd service for rtc_save_to_db..."

# Create the systemd service file (overwrite if necessary)
sudo bash -c "cat > $SERVICE_FILE_2" <<EOF
[Unit]
Description=RTC Save to DB Script
After=network.target

[Service]
ExecStart=/usr/bin/python3 /var/www/nebuleair_pro_4g/RTC/save_to_db.py
Restart=always
RestartSec=1
User=root
WorkingDirectory=/var/www/nebuleair_pro_4g
StandardOutput=append:/var/www/nebuleair_pro_4g/logs/rtc_save_to_db.log
StandardError=append:/var/www/nebuleair_pro_4g/logs/rtc_save_to_db_errors.log

[Install]
WantedBy=multi-user.target
EOF

success "Systemd service file created: $SERVICE_FILE_2"

# Reload systemd to recognize the new service
info "Reloading systemd daemon..."
sudo systemctl daemon-reload

# Enable the service to start on boot
info "Enabling the service to start on boot..."
sudo systemctl enable rtc_save_to_db.service

# Start the service immediately
info "Starting the service..."
sudo systemctl start rtc_save_to_db.service

# Display device information
echo ""
echo "=========================================="
echo -e "${GREEN}    Installation Complete!${NC}"
echo "=========================================="

# Get Raspberry Pi serial number (last 8 characters)
serial_number=$(cat /proc/cpuinfo | grep Serial | awk '{print substr($3, length($3) - 7)}' | tr '[:lower:]' '[:upper:]')
echo -e "${BLUE}Device ID (Serial):${NC} $serial_number"

# Get IP addresses
ip_wlan0=$(ip -4 addr show wlan0 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' || echo "Not connected")
ip_eth0=$(ip -4 addr show eth0 2>/dev/null | grep -oP '(?<=inet\s)\d+(\.\d+){3}' || echo "Not connected")

echo -e "${BLUE}IP Address (wlan0):${NC} $ip_wlan0"
echo -e "${BLUE}IP Address (eth0):${NC}  $ip_eth0"

echo "=========================================="
