#!/bin/bash
#
# Setup and mount contentstore for Ubuntu server
# Uses the same mount command as mount_lrs.sh
#

set -e

MOUNT_POINT="/mnt/aumentum_contentstore"
SHARE="//10.10.10.5/LRS_STORAGE"
CREDS_FILE="/root/.smb_credentials_aumentum"

echo "=========================================="
echo "Mount Contentstore for Ubuntu Server"
echo "=========================================="
echo ""

# Check if running as root
if [ "$EUID" -ne 0 ]; then 
    echo "Please run as root (use sudo)"
    exit 1
fi

# Create mount point
mkdir -p "$MOUNT_POINT"

# Get user/group IDs
APP_USER="plagis"
if id "$APP_USER" &>/dev/null; then
    USER_ID=$(id -u "$APP_USER")
    GROUP_ID=$(id -g "$APP_USER")
else
    USER_ID=1000
    GROUP_ID=1000
fi

echo "Mount point: $MOUNT_POINT"
echo "Share: $SHARE"
echo "Credentials: $CREDS_FILE"
echo "User ID: $USER_ID"
echo "Group ID: $GROUP_ID"
echo ""

# Check if credentials file exists
if [ ! -f "$CREDS_FILE" ]; then
    echo "❌ Credentials file not found: $CREDS_FILE"
    echo ""
    echo "Creating credentials file template..."
    echo "Please edit it with your actual password:"
    echo ""
    cat > "$CREDS_FILE" << 'EOF'
username=Administrator
password=YOURPASS
domain=
EOF
    chmod 600 "$CREDS_FILE"
    echo ""
    echo "File created at: $CREDS_FILE"
    echo "Edit it with: sudo nano $CREDS_FILE"
    echo "Then run this script again."
    exit 1
fi

# Unmount if already mounted
if mountpoint -q "$MOUNT_POINT"; then
    echo "⚠ Already mounted at $MOUNT_POINT"
    echo "Unmounting first..."
    umount "$MOUNT_POINT" || true
    sleep 1
fi

# Mount using the same command as mount_lrs.sh
echo "Mounting contentstore..."
if mount -t cifs "$SHARE" "$MOUNT_POINT" \
    -o credentials="$CREDS_FILE",uid=$USER_ID,gid=$GROUP_ID,file_mode=0755,dir_mode=0755; then
    echo "✅ Mount successful!"
    echo ""
    echo "Verifying mount:"
    df -h | grep aumentum || true
    echo ""
    echo "Testing contentstore access:"
    ls -la "$MOUNT_POINT/contentstore/" | head -5 || echo "⚠ Could not list contentstore directory"
else
    echo "❌ Mount failed"
    echo ""
    echo "Troubleshooting:"
    echo "1. Check credentials file: sudo cat $CREDS_FILE"
    echo "2. Test SMB connection: smbclient -L //10.10.10.5 -U Administrator"
    echo "3. Check kernel messages: dmesg | tail -20"
    exit 1
fi

echo ""
echo "✅ Contentstore is ready!"
echo ""

# Configure automatic mounting on boot
echo "=========================================="
echo "Configuring Automatic Mount on Boot"
echo "=========================================="
echo ""

# Check if already in fstab
if grep -q "aumentum_contentstore" /etc/fstab 2>/dev/null; then
    echo "✅ Mount entry already exists in /etc/fstab"
    echo "   Entry:"
    grep "aumentum_contentstore" /etc/fstab | sed 's/^/      /'
else
    echo "📝 Adding mount entry to /etc/fstab for automatic mounting on boot..."
    
    # Create fstab entry
    FSTAB_ENTRY="//10.10.10.5/LRS_STORAGE $MOUNT_POINT cifs credentials=$CREDS_FILE,uid=$USER_ID,gid=$GROUP_ID,file_mode=0755,dir_mode=0755,_netdev 0 0"
    
    # Backup fstab
    cp /etc/fstab /etc/fstab.backup.$(date +%Y%m%d_%H%M%S)
    echo "   Backed up /etc/fstab"
    
    # Add entry
    echo "$FSTAB_ENTRY" >> /etc/fstab
    echo "✅ Added to /etc/fstab:"
    echo "   $FSTAB_ENTRY"
    echo ""
    echo "   Note: The '_netdev' option ensures mount waits for network"
fi

echo ""
echo "Testing fstab configuration..."
if mount -a 2>&1 | grep -q "aumentum_contentstore"; then
    echo "⚠️  Mount test had issues (this is normal if already mounted)"
else
    echo "✅ fstab configuration is valid"
fi

# Option 2: Use systemd mount unit (more reliable for CIFS)
echo ""
echo "=========================================="
echo "Configuring Systemd Mount Unit (Recommended)"
echo "=========================================="
echo ""

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Systemd mount unit naming: /mnt/aumentum_contentstore -> mnt-aumentum_contentstore.mount
MOUNT_UNIT="mnt-aumentum_contentstore.mount"
MOUNT_UNIT_SOURCE="$SCRIPT_DIR/$MOUNT_UNIT"
MOUNT_UNIT_TARGET="/etc/systemd/system/$MOUNT_UNIT"

# Try to find mount unit (handle different naming conventions)
MOUNT_UNIT_ALT1="mnt-aumentum-contentstore.mount"
MOUNT_UNIT_ALT2="mnt-aumentum\\x2dcontentstore.mount"

FOUND_UNIT="$MOUNT_UNIT"
if [ ! -f "$MOUNT_UNIT_SOURCE" ]; then
    for unit_name in "$MOUNT_UNIT_ALT1" "$MOUNT_UNIT_ALT2"; do
        if [ -f "$SCRIPT_DIR/$unit_name" ]; then
            FOUND_UNIT="$unit_name"
            MOUNT_UNIT_SOURCE="$SCRIPT_DIR/$unit_name"
            break
        fi
    done
fi

if [ -n "$FOUND_UNIT" ]; then
    if [ -f "$MOUNT_UNIT_TARGET" ]; then
        echo "✅ Systemd mount unit already exists: $MOUNT_UNIT_TARGET"
    else
        echo "📝 Installing systemd mount unit..."
        cp "$MOUNT_UNIT_SOURCE" "$MOUNT_UNIT_TARGET"
        
        # Update UID/GID in the mount unit if needed
        sed -i "s/uid=[0-9]*/uid=$USER_ID/g" "$MOUNT_UNIT_TARGET"
        sed -i "s/gid=[0-9]*/gid=$GROUP_ID/g" "$MOUNT_UNIT_TARGET"
        
        systemctl daemon-reload
        systemctl enable "$MOUNT_UNIT" 2>/dev/null || systemctl enable "$FOUND_UNIT"
        echo "✅ Systemd mount unit installed and enabled"
        echo "   This is more reliable than fstab for CIFS mounts"
        echo "   Unit name: $FOUND_UNIT"
    fi
    
    # Also install fallback service to ensure mount happens
    FALLBACK_SERVICE="ensure-contentstore-mount.service"
    FALLBACK_SERVICE_SOURCE="$SCRIPT_DIR/$FALLBACK_SERVICE"
    FALLBACK_SERVICE_TARGET="/etc/systemd/system/$FALLBACK_SERVICE"
    
    if [ -f "$FALLBACK_SERVICE_SOURCE" ]; then
        if [ -f "$FALLBACK_SERVICE_TARGET" ]; then
            echo "✅ Fallback mount service already exists: $FALLBACK_SERVICE_TARGET"
        else
            echo "📝 Installing fallback mount service..."
            cp "$FALLBACK_SERVICE_SOURCE" "$FALLBACK_SERVICE_TARGET"
            
            # Update UID/GID in the service if needed
            sed -i "s/uid=[0-9]*/uid=$USER_ID/g" "$FALLBACK_SERVICE_TARGET"
            sed -i "s/gid=[0-9]*/gid=$GROUP_ID/g" "$FALLBACK_SERVICE_TARGET"
            
            systemctl daemon-reload
            systemctl enable "$FALLBACK_SERVICE"
            echo "✅ Fallback mount service installed and enabled"
            echo "   This ensures mount happens even if mount unit fails"
        fi
    else
        echo "⚠️  Fallback service template not found: $FALLBACK_SERVICE_SOURCE"
    fi
else
    echo "⚠️  Mount unit template not found in $SCRIPT_DIR"
    echo "   Looked for: $MOUNT_UNIT, $MOUNT_UNIT_ALT1, $MOUNT_UNIT_ALT2"
fi

echo ""
echo "=========================================="
echo "Summary"
echo "=========================================="
echo ""
echo "✅ Mount point: $MOUNT_POINT"
echo "✅ Credentials: $CREDS_FILE"
echo ""

# Check all methods
FSTAB_CONFIGURED=false
SYSTEMD_CONFIGURED=false
FALLBACK_CONFIGURED=false

if grep -q "aumentum_contentstore" /etc/fstab 2>/dev/null; then
    FSTAB_CONFIGURED=true
    echo "✅ fstab mount: CONFIGURED"
else
    echo "⚠️  fstab mount: NOT CONFIGURED"
fi

if [ -f "$MOUNT_UNIT_TARGET" ] && systemctl is-enabled "$MOUNT_UNIT" &>/dev/null; then
    SYSTEMD_CONFIGURED=true
    echo "✅ systemd mount unit: CONFIGURED (PRIMARY)"
else
    echo "⚠️  systemd mount unit: NOT CONFIGURED"
fi

if systemctl is-enabled ensure-contentstore-mount.service &>/dev/null 2>&1; then
    FALLBACK_CONFIGURED=true
    echo "✅ fallback mount service: CONFIGURED (BACKUP)"
else
    echo "⚠️  fallback mount service: NOT CONFIGURED"
fi

echo ""

if [ "$SYSTEMD_CONFIGURED" = true ] || [ "$FALLBACK_CONFIGURED" = true ]; then
    echo "✅ Automatic mount on boot: CONFIGURED"
    echo ""
    if [ "$SYSTEMD_CONFIGURED" = true ]; then
        echo "   Primary: systemd mount unit"
    fi
    if [ "$FALLBACK_CONFIGURED" = true ]; then
        echo "   Backup: fallback mount service"
    fi
    echo ""
    echo "The contentstore will automatically mount on boot."
    echo "To test: sudo systemctl stop mnt-aumentum_contentstore.mount ensure-contentstore-mount.service"
    echo "         sudo systemctl start ensure-contentstore-mount.service"
    echo "To check status: sudo systemctl status mnt-aumentum_contentstore.mount"
    echo "                 sudo systemctl status ensure-contentstore-mount.service"
elif [ "$FSTAB_CONFIGURED" = true ]; then
    echo "✅ Automatic mount on boot: CONFIGURED (using fstab only)"
    echo ""
    echo "The contentstore will automatically mount on boot using fstab."
    echo "To test: sudo umount $MOUNT_POINT && sudo mount -a"
    echo ""
    echo "⚠️  Consider using systemd mount unit for better reliability"
else
    echo "⚠️  Automatic mount on boot: NOT CONFIGURED"
    echo ""
    echo "Please run this script again to configure automatic mounting."
fi
echo ""

