#!/usr/bin/env bash
set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
SCRIPTS_DIR="$ROOT_DIR/scripts"

mkdir -p "$ROOT_DIR/scripts/lib"

cat > "$ROOT_DIR/scripts/lib/paths.sh" <<'EOF'
#!/usr/bin/env bash
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
SCRIPTS_DIR="$PROJECT_ROOT/scripts"
COMMON_DIR="$PROJECT_ROOT/common"
DEFAULTS_DIR="$PROJECT_ROOT/defaults"
APPS_DIR="$PROJECT_ROOT/apps"
SYS_APPS_DIR="$PROJECT_ROOT/sys-apps"
EOF

cat > "$ROOT_DIR/common/php/paths.php" <<'EOF'
<?php
declare(strict_types=1);

$PROJECT_ROOT = dirname(__DIR__, 2);
$COMMON_DIR = $PROJECT_ROOT . '/common';
$DEFAULTS_DIR = $PROJECT_ROOT . '/defaults';
$APPS_DIR = $PROJECT_ROOT . '/apps';
$SYS_APPS_DIR = $PROJECT_ROOT . '/sys-apps';
EOF

cat > "$ROOT_DIR/common/js/paths.js" <<'EOF'
export const PROJECT_ROOT = process.cwd();
export const COMMON_DIR = `${PROJECT_ROOT}/common`;
export const DEFAULTS_DIR = `${PROJECT_ROOT}/defaults`;
export const APPS_DIR = `${PROJECT_ROOT}/apps`;
export const SYS_APPS_DIR = `${PROJECT_ROOT}/sys-apps`;
EOF

cat > "$ROOT_DIR/scripts/ensure-paths.sh" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail

check_file() {
  local file="$1"
  local needle="$2"
  if ! grep -qF "$needle" "$file"; then
    echo "MISSING PATH INCLUDE: $file"
    return 1
  fi
}

check_file "$ROOT_DIR/scripts/create-dir.sh" 'source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/paths.sh"'
check_file "$ROOT_DIR/scripts/new-app.sh" 'source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/paths.sh"'
check_file "$ROOT_DIR/scripts/runall.sh" 'source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/lib/paths.sh"'

echo "Path include checks passed."
EOF

chmod +x "$ROOT_DIR/scripts/ensure-paths.sh"
echo "Shared path files created."
