#!/bin/bash
# install-system-paths.sh - One-time installer for system/ path layer
# Run from project root: bash system/install-system-paths.sh
# Or: php system/install-system-paths.php (both work)

set -e

PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." 2>/dev/null && pwd || pwd)"
if [ ! -d "$PROJECT_ROOT/system" ]; then
  PROJECT_ROOT="$(pwd)"
fi

echo "=== Installing System Path Layer ==="
echo "Project Root: $PROJECT_ROOT"

exit
# 1. Create folders
mkdir -p "$PROJECT_ROOT/system"
mkdir -p "$PROJECT_ROOT/templates"
mkdir -p "$PROJECT_ROOT/frontend"
mkdir -p "$PROJECT_ROOT/includes"
mkdir -p "$PROJECT_ROOT/admin"
mkdir -p "$PROJECT_ROOT/data"
mkdir -p "$PROJECT_ROOT/logs"
mkdir -p "$PROJECT_ROOT/review"

# 2. Create system/paths.php
cat > "$PROJECT_ROOT/system/paths.php" <<'PHP'
<?php
// system/paths.php - Single source of truth for ALL paths
// Every PHP file MUST include this as first line:
// require_once __DIR__ . '/../system/paths.php';  OR from root: __DIR__ . '/system/paths.php'

$SYSTEM_DIR = __DIR__;
$PROJECT_ROOT = realpath($SYSTEM_DIR . '/..');
$DOC_ROOT = realpath($_SERVER['DOCUMENT_ROOT'] ?? $PROJECT_ROOT);

$BASE_URL = str_replace($DOC_ROOT, '', $PROJECT_ROOT);
$BASE_URL = '/' . trim($BASE_URL, '/');
if ($BASE_URL === '//' || $BASE_URL === '/') $BASE_URL = '';
if ($BASE_URL !== '' && $BASE_URL[0] !== '/') $BASE_URL = '/' . $BASE_URL;

define('PROJECT_ROOT', $PROJECT_ROOT);
define('SYSTEM_DIR', $SYSTEM_DIR);
define('INCLUDES_DIR', PROJECT_ROOT . '/includes');
define('ADMIN_DIR', PROJECT_ROOT . '/admin');
define('FRONTEND_DIR', PROJECT_ROOT . '/frontend');
define('DATA_DIR', PROJECT_ROOT . '/data');
define('LOGS_DIR', PROJECT_ROOT . '/logs');
define('TEMPLATES_DIR', PROJECT_ROOT . '/templates');

define('BASE_URL', $BASE_URL);
define('INCLUDES_URL', BASE_URL . '/includes');
define('ADMIN_URL', BASE_URL . '/admin');
define('FRONTEND_URL', BASE_URL . '/frontend');
define('SYSTEM_URL', BASE_URL . '/system');

define('REL_INCLUDES', '../includes/');
define('REL_ADMIN', '../admin/');
define('REL_FRONTEND', '../frontend/');
define('REL_SYSTEM', '../system/');

$envFile = SYSTEM_DIR . '/env.php';
if (file_exists($envFile)) require_once $envFile;

function sys_include($path) {
    $path = ltrim($path, '/');
    $candidates = [
        PROJECT_ROOT . '/' . $path,
        INCLUDES_DIR . '/' . $path,
        INCLUDES_DIR . '/' . basename($path),
        ADMIN_DIR . '/' . $path,
        TEMPLATES_DIR . '/' . $path,
        TEMPLATES_DIR . '/' . basename($path),
        SYSTEM_DIR . '/' . $path,
        FRONTEND_DIR . '/' . $path,
    ];
    foreach ($candidates as $c) {
        if (file_exists($c)) return $c;
    }
    return PROJECT_ROOT . '/' . $path;
}

$jsonPath = SYSTEM_DIR . '/paths.json';
$jsonData = [
    'BASE_URL' => BASE_URL,
    'INCLUDES_URL' => INCLUDES_URL,
    'ADMIN_URL' => ADMIN_URL,
    'FRONTEND_URL' => FRONTEND_URL,
    'REL_INCLUDES' => REL_INCLUDES,
    'REL_ADMIN' => REL_ADMIN,
];
@file_put_contents($jsonPath, json_encode($jsonData, JSON_PRETTY_PRINT));
PHP
echo "✓ system/paths.php"

# 3. Create system/env.php
cat > "$PROJECT_ROOT/system/env.php" <<'PHP'
<?php
define('ENV', getenv('APP_ENV') ?: 'production');
define('PROJECT_NAME', 'aiwizard');
define('PROJECT_VERSION', '2.0-php-templates');
define('DEBUG_MODE', ENV === 'development');
PHP
echo "✓ system/env.php"

# 4. Create system/paths.sh
cat > "$PROJECT_ROOT/system/paths.sh" <<'SH'
#!/bin/bash
SOURCE="${BASH_SOURCE[0]}"
while [ -L "$SOURCE" ]; do
  DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
  SOURCE="$(readlink "$SOURCE")"
  [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE"
done
SCRIPT_DIR="$(cd -P "$(dirname "$SOURCE")" && pwd)"
PROJECT_ROOT="$(realpath "$SCRIPT_DIR/..")"
export PROJECT_ROOT
export SYSTEM_DIR="$PROJECT_ROOT/system"
export INCLUDES_DIR="$PROJECT_ROOT/includes"
export ADMIN_DIR="$PROJECT_ROOT/admin"
export FRONTEND_DIR="$PROJECT_ROOT/frontend"
export DATA_DIR="$PROJECT_ROOT/data"
export LOGS_DIR="$PROJECT_ROOT/logs"
export TEMPLATES_DIR="$PROJECT_ROOT/templates"
export REL_INCLUDES="../includes/"
export REL_ADMIN="../admin/"
export REL_FRONTEND="../frontend/"
export REL_SYSTEM="../system/"
if [ -f "$SYSTEM_DIR/.env" ]; then set -a; source "$SYSTEM_DIR/.env"; set +a; fi
SH
chmod +x "$PROJECT_ROOT/system/paths.sh"
echo "✓ system/paths.sh"

# 5. Create templates/navbar.php
cat > "$PROJECT_ROOT/templates/navbar.php" <<'PHP'
<?php
if (!defined('PROJECT_ROOT')) {
    require_once __DIR__ . '/../system/paths.php';
}
?>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark" id="adminNavbar">
  <div class="container-fluid">
    <a class="navbar-brand" href="<?= BASE_URL ?>/frontend/login.php"><?= defined('PROJECT_NAME') ? PROJECT_NAME : 'Wizard' ?></a>
    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav"><span class="navbar-toggler-icon"></span></button>
    <div class="collapse navbar-collapse" id="navbarNav">
      <ul class="navbar-nav me-auto">
        <li class="nav-item"><a class="nav-link" href="<?= FRONTEND_URL ?>/login.php">Wizard</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/logs.php">Logs</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/autosave.php">Autosave</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/install.php">Installs</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/zips.php">ZIPs</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/health.php">Health</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/settings.php">Settings</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/users.php">Users</a></li>
        <li class="nav-item"><a class="nav-link" href="<?= ADMIN_URL ?>/sessions.php">Sessions</a></li>
      </ul>
      <span class="navbar-text" id="navbarTitle">Untitled Project</span>
      <span class="navbar-text ms-3" id="navbarStep"></span>
      <span class="navbar-text ms-3" id="navbarStatus"></span>
    </div>
  </div>
</nav>
PHP
echo "✓ templates/navbar.php"

cat > "$PROJECT_ROOT/templates/sidebar.php" <<'PHP'
<?php if (!defined('PROJECT_ROOT')) require_once __DIR__ . '/../system/paths.php'; ?>
<div id="sidebar" class="wizard-sidebar">
  <?php for($i=1;$i<=10;$i++): ?><div class="sidebar-item" data-step="<?= $i ?>"><span>Step <?= $i ?></span><span class="badge" id="badge<?= $i ?>"></span></div><?php endfor; ?>
</div>
PHP
echo "✓ templates/sidebar.php"

cat > "$PROJECT_ROOT/templates/footer.php" <<'PHP'
<?php if (!defined('PROJECT_ROOT')) require_once __DIR__ . '/../system/paths.php'; ?>
<footer class="wizard-footer text-center p-2"><small><?= PROJECT_NAME ?? 'aiwizard' ?> | <?= BASE_URL ?> | <?= ENV ?? 'prod' ?></small></footer>
PHP
echo "✓ templates/footer.php"

# 6. Create frontend/admin-navbar.js (loader, not template)
cat > "$PROJECT_ROOT/frontend/admin-navbar.js" <<'JS'
// admin-navbar.js - THIN LOADER - fetches templates/navbar.php
export async function loadAdminNavbar(targetId = null) {
    let baseUrl = '';
    try {
        const r = await fetch('../system/paths.json');
        if (r.ok) { const p = await r.json(); baseUrl = p.BASE_URL || ''; }
    } catch(e) {}
    const urls = [`${baseUrl}/templates/navbar.php`, '../templates/navbar.php', '../system/../templates/navbar.php'];
    for (const url of urls) {
        try {
            const resp = await fetch(url, {credentials:'same-origin'});
            if (resp.ok) {
                const html = await resp.text();
                const ph = document.getElementById('navbar-container') || document.getElementById(targetId || 'navbar-placeholder');
                if (ph) ph.innerHTML = html; else document.body.insertAdjacentHTML('afterbegin', html);
                return html;
            }
        } catch(e){}
    }
    return null;
}
JS
echo "✓ frontend/admin-navbar.js"

# 7. Create audit/fix script
cat > "$PROJECT_ROOT/review/fix-paths-system.php" <<'PHP'
<?php
require_once __DIR__ . '/../system/paths.php';
echo "=== AUDIT: system/paths.php inclusion ===\n";
$files = array_merge(
    glob(PROJECT_ROOT . '/*.php') ?: [],
    glob(INCLUDES_DIR . '/*.php') ?: [],
    glob(ADMIN_DIR . '/*.php') ?: [],
    glob(FRONTEND_DIR . '/*.php') ?: [],
    glob(TEMPLATES_DIR . '/*.php') ?: []
);
$bad = []; $good = [];
foreach ($files as $f) {
    $c = file_get_contents($f);
    if (strpos($f, 'system/paths.php') !== false) continue;
    if (strpos($c, 'system/paths.php') === false) $bad[] = $f; else $good[] = $f;
}
echo "Good (includes paths.php): " . count($good) . "\n";
if ($bad) {
    echo "BAD - Missing system/paths.php:\n";
    foreach ($bad as $b) echo " - " . str_replace(PROJECT_ROOT.'/', '', $b) . "\n";
} else echo "All files include system/paths.php ✓\n";

echo "\n=== AUDIT: Hardcoded paths ===\n";
$patterns = ['"/includes/', "'/includes/", '"/admin/', "'/admin/", '"../includes/"', "'../includes/'"];
$found = [];
foreach ($files as $f) {
    $c = file_get_contents($f);
    if (basename($f) === 'paths.php') continue;
    foreach ($patterns as $pat) {
        if (strpos($c, trim($pat, '"\'')) !== false && strpos($c, 'REL_') === false && strpos($c, 'sys_include') === false) {
            // allow in paths.php definition itself
            if (strpos($c, 'define(') !== false) continue;
            $found[] = $f . " contains " . $pat;
        }
    }
}
if ($found) foreach ($found as $f) echo "WARN: $f\n"; else echo "No hardcoded paths found ✓\n";
PHP
echo "✓ review/fix-paths-system.php"

# 8. Make writable
chmod -R 775 "$PROJECT_ROOT/data" 2>/dev/null || true
chmod -R 775 "$PROJECT_ROOT/logs" 2>/dev/null || true
chmod 775 "$PROJECT_ROOT/system" 2>/dev/null || true

echo ""
echo "=== Install Complete ==="
echo "Next steps:"
echo "1. php review/fix-paths-system.php  (audit)"
echo "2. Update your existing files to start with: require_once __DIR__ . '/../system/paths.php';"
echo "3. Replace include '../templates/' with include sys_include('templates/...')"
echo ""
ls -lh "$PROJECT_ROOT/system/"

