#!/bin/bash
# File: /var/www/moduleair_pro_4g/services/setup_services.sh
# Purpose: Set up all systemd services for moduleair data collection and LED matrix display
# to install: 
#   sudo chmod +x /var/www/moduleair_pro_4g/services/setup_services.sh
#   sudo /var/www/moduleair_pro_4g/services/setup_services.sh

echo "Setting up moduleair systemd services and timers..."

# Create directory for logs if it doesn't exist
mkdir -p /var/www/moduleair_pro_4g/logs

# Create service and timer files for NPM Data
cat > /etc/systemd/system/moduleair-npm-data.service << 'EOL'
[Unit]
Description=moduleair NPM Data Collection Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/NPM/get_data_modbus_v3.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/npm_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/npm_service_errors.log

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-npm-data.timer << 'EOL'
[Unit]
Description=Run moduleair NPM Data Collection every 10 seconds
Requires=moduleair-npm-data.service

[Timer]
OnBootSec=10s
OnUnitActiveSec=10s
AccuracySec=1s

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for CO2 Data
cat > /etc/systemd/system/moduleair-co2-data.service << 'EOL'
[Unit]
Description=moduleair co2 Data Collection Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/MH-Z19/write_data.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/co2_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/co2_service_errors.log

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-co2-data.timer << 'EOL'
[Unit]
Description=Run moduleair co2 Data Collection every 10 seconds
Requires=moduleair-co2-data.service

[Timer]
OnBootSec=10s
OnUnitActiveSec=10s
AccuracySec=1s

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for Envea Data
cat > /etc/systemd/system/moduleair-envea-data.service << 'EOL'
[Unit]
Description=moduleair Envea Data Collection Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/envea/read_value_v2.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/envea_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/envea_service_errors.log

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-envea-data.timer << 'EOL'
[Unit]
Description=Run moduleair Envea Data Collection every 10 seconds
Requires=moduleair-envea-data.service

[Timer]
OnBootSec=10s
OnUnitActiveSec=10s
AccuracySec=1s

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for SARA Data (No Lock File Needed)
cat > /etc/systemd/system/moduleair-sara-data.service << 'EOL'
[Unit]
Description=moduleair SARA Data Transmission Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/loop/SARA_send_data_v2.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/sara_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/sara_service_errors.log
RuntimeMaxSec=200s

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-sara-data.timer << 'EOL'
[Unit]
Description=Run moduleair SARA Data Transmission every 60 seconds
Requires=moduleair-sara-data.service

[Timer]
OnBootSec=60s
OnUnitActiveSec=60s
AccuracySec=1s
# This is the key setting that prevents overlap
Persistent=true

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for BME280 Data
cat > /etc/systemd/system/moduleair-bme280-data.service << 'EOL'
[Unit]
Description=moduleair BME280 Data Collection Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/BME280/get_data_v2.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/bme280_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/bme280_service_errors.log

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-bme280-data.timer << 'EOL'
[Unit]
Description=Run moduleair BME280 Data Collection every 120 seconds
Requires=moduleair-bme280-data.service

[Timer]
OnBootSec=120s
OnUnitActiveSec=120s
AccuracySec=1s

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for Database Cleanup
cat > /etc/systemd/system/moduleair-db-cleanup-data.service << 'EOL'
[Unit]
Description=moduleair Database Cleanup Service
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/python3 /var/www/moduleair_pro_4g/sqlite/flush_old_data.py
User=root
WorkingDirectory=/var/www/moduleair_pro_4g
StandardOutput=append:/var/www/moduleair_pro_4g/logs/db_cleanup_service.log
StandardError=append:/var/www/moduleair_pro_4g/logs/db_cleanup_service_errors.log

[Install]
WantedBy=multi-user.target
EOL

cat > /etc/systemd/system/moduleair-db-cleanup-data.timer << 'EOL'
[Unit]
Description=Run moduleair Database Cleanup daily
Requires=moduleair-db-cleanup-data.service

[Timer]
OnBootSec=1h
OnUnitActiveSec=24h
AccuracySec=1h

[Install]
WantedBy=timers.target
EOL

# Create service and timer files for LED Matrix Display
cat > /etc/systemd/system/moduleair-boot.service << 'EOL'
[Unit]
Description=ModuleAir Matrix Boot Display
After=network.target
After=multi-user.target

[Service]
Type=simple
ExecStart=/var/www/moduleair_pro_4g/services/matrix_boot.sh
User=root
WorkingDirectory=/var/www/moduleair_pro_4g/
StandardOutput=append:/var/www/moduleair_pro_4g/logs/matrix_boot.log
StandardError=append:/var/www/moduleair_pro_4g/logs/matrix_boot.log
TimeoutStartSec=120s
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target
EOL

# Make sure the matrix executable has proper permissions
echo "Setting permissions for LED matrix executable..."
chmod +x /var/www/moduleair_pro_4g/matrix/imageScreen/image_split
chmod +x /var/www/moduleair_pro_4g/matrix/screenSensors/displayAll4_v2

# Reload systemd to recognize new services
systemctl daemon-reload

# Enable and start all timers
echo "Enabling and starting all services..."
for service in npm envea sara bme280 co2 db-cleanup; do
    systemctl enable moduleair-$service-data.timer
    systemctl start moduleair-$service-data.timer
    echo "Started moduleair-$service-data timer"
done

# Enable the boot service (runs once at boot, no timer needed)
echo "Enabling boot display service..."
systemctl enable moduleair-boot.service

echo "Checking status of all timers..."
systemctl list-timers | grep moduleair

echo "Setup complete. All moduleair services are now running."
echo ""
echo "LED Matrix Display will:"
echo "  - Start 30 seconds after boot"
echo "  - Run every 10 seconds (6s animation + 4s gap)"
echo "  - Show split reveal animation + 3s display"
echo ""
echo "To check the status of services:"
echo "  sudo systemctl status moduleair-npm-data.service"
echo "  sudo systemctl status moduleair-matrix-display.service"
echo ""
echo "To view logs for services:"
echo "  sudo journalctl -u moduleair-npm-data.service"
echo "  sudo journalctl -u moduleair-matrix-display.service"
echo "  tail -f /var/www/moduleair_pro_4g/logs/matrix_service.log"
echo ""
echo "To restart timers:"
echo "  sudo systemctl restart moduleair-npm-data.timer"
echo "  sudo systemctl restart moduleair-matrix-display.timer"
echo ""
echo "To disable matrix display:"
echo "  sudo systemctl stop moduleair-matrix-display.timer"
echo "  sudo systemctl disable moduleair-matrix-display.timer"