#!/bin/bash

# ==============================================================================
# FlexCryst Suite v2026.1 - Linux Installation Script
# Developer: Detlef W.M. Hofmann
# Requirements: Java 17+, wget, unzip
# ==============================================================================

# --- Configuration ---
VERSION="2026.1"
INSTALL_DIR="$HOME/FlexCryst_v$VERSION"
DOWNLOAD_URL="https://www.flexcryst.com/FlexCryst_v$VERSION.zip"
echo "DOWNLOAD_URL $DOWNLOAD_URL"
ZIP_FILE="/tmp/FlexCryst_$VERSION.zip"
DESKTOP_FILE="$HOME/Desktop/FlexCryst_$VERSION.desktop"

clear
echo "----------------------------------------------------"
echo "      FlexCryst Suite v$VERSION Installation"
echo "----------------------------------------------------"

# 1. Dependency Checks (Java 17)
echo "Checking for Java 17+..."
if ! command -v java &> /dev/null; then
    echo "Error: Java is not installed. Please install Java 17 or higher."
    exit 1
fi

JAVA_VER=$(java -version 2>&1 | head -n 1 | awk -F '"' '{print $2}' | awk -F '[._]' '{print $1}')
if [ "$JAVA_VER" -lt 17 ]; then
    echo "Warning: FlexCryst requires at least Java 17. Detected: $JAVA_VER"
    echo "The application might not function correctly."
fi

# 2. Create Directory Structure
echo "Preparing directories at $INSTALL_DIR..."
mkdir -p "$INSTALL_DIR"
mkdir -p "$TEMP_WORK_DIR"

# 3. Download from flexcryst.com
echo "Downloading FlexCryst package..."
wget -q --show-progress -O "$ZIP_FILE" "$DOWNLOAD_URL"
if [ $? -ne 0 ]; then
    echo "Error: Download failed. Please check your internet connection."
    exit 1
fi

# 4. Extract Application
echo "Extracting files..."
# Wir entpacken direkt in das Zielverzeichnis
unzip -q -o "$ZIP_FILE" -d "$HOME"

# 5. Create Robust Startup Script (start_flexcryst.sh)
# Dieses Skript setzt die Umgebungsvariablen für die native Engine korrekt
echo "Generating startup script..."
cat <<EOF > "$INSTALL_DIR/start_flexcryst.sh"
#!/bin/bash
# FlexCryst v$VERSION Starter
DIR="\$(cd "\$(dirname "\$0")" && pwd)"
cd "\$DIR"

# Library Path für native Fortran Engine und OpenGL (libj3dcore-ogl.so)
export LD_LIBRARY_PATH="\$DIR/lib:\$LD_LIBRARY_PATH"

# Java-Parameter: Speicherlimit und Access-Flags für Swing/AWT
JAVA_OPTS="-Xmx1500m --add-opens java.desktop/sun.awt=ALL-UNNAMED --add-opens java.desktop/java.awt=ALL-UNNAMED"

# Start der Applikation
java \$JAVA_OPTS -Djava.library.path="\$DIR/lib" -cp "lib/FlexCrystGui-2.00.jar:lib/*" FlexCryst
EOF
chmod +x "$INSTALL_DIR/start_flexcryst.sh"

# 6. Create Desktop Shortcut (.desktop file)
echo "Creating Desktop shortcut..."
cat <<EOF > "$DESKTOP_FILE"
[Desktop Entry]
Version=1.0
Type=Application
Name=FlexCryst $VERSION
Comment=Machine Learning based Crystallography Suite
Exec=$INSTALL_DIR/start_flexcryst.sh
Icon=$INSTALL_DIR/etc/FlexCryst.png
Terminal=true
Categories=Science;Education;
EOF
chmod +x "$DESKTOP_FILE"

# 7. Cleanup
rm "$ZIP_FILE"

echo "----------------------------------------------------"
echo "Installation Successful!"
echo "Version: $VERSION"
echo "Path:    $INSTALL_DIR"
echo ""
echo "Files verfied:"
echo " - Help (Module): etc/ViewingHelpText.html"
echo " - Help (Visual): etc/ViewerHelpText.html"
echo " - Native Engine: lib/FlexCrystNative-2.00.so"
echo ""
echo "You can now start FlexCryst from your Desktop."
echo "----------------------------------------------------"
