#!/bin/bash
# ========================================================
# Script to setup Catkin workspace for pnkx_nav_core
# ========================================================

set -e

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
WORKSPACE_NAME="pnkx_nav_catkin_ws"
WORKSPACE_DIR="${SCRIPT_DIR}/../${WORKSPACE_NAME}"

echo "=========================================="
echo "Setting up Catkin workspace for pnkx_nav_core"
echo "=========================================="
echo ""

# Create workspace directory
echo "Creating workspace directory: ${WORKSPACE_DIR}"
mkdir -p "${WORKSPACE_DIR}/src"

# Check if src directory already has packages
if [ -d "${WORKSPACE_DIR}/src" ] && [ "$(ls -A ${WORKSPACE_DIR}/src 2>/dev/null)" ]; then
    echo "Warning: ${WORKSPACE_DIR}/src already contains packages"
    read -p "Do you want to continue? (y/n) " -n 1 -r
    echo
    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
        echo "Aborted."
        exit 1
    fi
fi

# Create symlinks to packages that have package.xml
echo ""
echo "Creating symlinks to packages with package.xml..."

# Find all packages with package.xml in the source tree
PACKAGES=(
    "src/Libraries/tf3"
    "src/Libraries/robot_nav_2d_utils"
    "src/Navigations/Libraries/nav_grid"
    "src/Navigations/Cores/nav_core"
    "src/Navigations/Cores/nav_core2"
    "src/Navigations/Cores/nav_core_adapter"
    "src/Navigations/Cores/move_base_core"
    "src/Navigations/Cores/nav_core_adapter"
    "src/Packages/move_base"
    "src/Navigations/Packages/move_base"
)

for PKG_PATH in "${PACKAGES[@]}"; do
    FULL_PATH="${SCRIPT_DIR}/${PKG_PATH}"
    if [ -f "${FULL_PATH}/package.xml" ]; then
        PKG_NAME=$(basename "${PKG_PATH}")
        TARGET="${WORKSPACE_DIR}/src/${PKG_NAME}"
        
        if [ -e "${TARGET}" ]; then
            echo "  Warning: ${TARGET} already exists, skipping..."
        else
            echo "  Linking: ${PKG_NAME} -> ${PKG_PATH}"
            ln -s "${FULL_PATH}" "${TARGET}"
        fi
    else
        echo "  Warning: ${PKG_PATH}/package.xml not found, skipping..."
    fi
done

# Create a README in the workspace
cat > "${WORKSPACE_DIR}/README.md" << EOF
# Catkin Workspace for pnkx_nav_core

This is a Catkin workspace containing ROS-compatible packages from pnkx_nav_core.

## Structure

\`\`\`
${WORKSPACE_NAME}/
├── src/              # Source packages (symlinked from pnkx_nav_core)
└── build/            # Build directory (created by catkin_make)
\`\`\`

## Building

\`\`\`bash
cd ${WORKSPACE_DIR}
catkin_make
\`\`\`

## Source the workspace

After building, source the setup file:

\`\`\`bash
source devel/setup.bash
\`\`\`

## Note

Packages in \`src/\` are symlinked from the main pnkx_nav_core project.
To add more packages, create symlinks in \`src/\` pointing to packages
that have both \`CMakeLists.txt\` and \`package.xml\`.
EOF

echo ""
echo "=========================================="
echo "Workspace setup complete!"
echo "=========================================="
echo ""
echo "Next steps:"
echo "  1. cd ${WORKSPACE_DIR}"
echo "  2. catkin_make"
echo "  3. source devel/setup.bash"
echo ""
echo "Note: Make sure all dependencies are built in the main project first"
echo "      using standalone CMake before building with catkin."
echo ""

