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

# Usage:
#   ./install-adminlte-scaffold-tools-v2.sh ["App Name"] ["target-dir"]
#
# Works on:
#   - macOS (Darwin, BSD sed)
#   - Linux (GNU sed)

APP_NAME="${1:-Admin Portal}"
BASE_DIR="${2:-admin}"

echo "Installing AdminLTE PHP scaffold (tools v2) in: ${BASE_DIR}"

mkdir -p \
    "${BASE_DIR}/includes" \
    "${BASE_DIR}/assets/css" \
    "${BASE_DIR}/assets/js"

# ---------- Helper: portable in-place sed ----------
sed_inplace() {
    local expr="$1"
    local file="$2"
    sed -i.bak "${expr}" "${file}"
    rm -f "${file}.bak"
}
# ---------------------------------------------------

cat > "${BASE_DIR}/admin.index.php" <<'PHP'
<?php

declare(strict_types=1);

// Session setup – same pattern as before
ini_set('session.save_path', '/Users/rbutare/websites/system/tmp/sessions');
session_start();

$pageTitle = $pageTitle ?? 'Dashboard';

/**
 * Include a file only if it exists and is readable.
 */
function include_if_exists(string $file): void
{
    if (is_file($file) && is_readable($file)) {
        require $file;
    }
}

$includesDir = __DIR__ . '/includes';
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <title><?= htmlspecialchars($pageTitle, ENT_QUOTES, 'UTF-8') ?> | Admin</title>

    <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.13.1/font/bootstrap-icons.min.css"
    >

    <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/styles/overlayscrollbars.min.css"
    >

    <link
        rel="stylesheet"
        href="https://cdn.jsdelivr.net/npm/admin-lte@4.9.1/dist/css/adminlte.min.css"
    >

    <link rel="stylesheet" href="assets/css/custom.css">
</head>

<body class="layout-fixed sidebar-expand-lg bg-body-tertiary">
<div class="app-wrapper">

    <!-- Navbar -->
    <header class="app-header navbar navbar-expand bg-body" id="layout-navbar">
        <?php include_if_exists($includesDir . '/navbar.php'); ?>
    </header>

    <!-- Sidebar -->
    <aside class="app-sidebar bg-dark shadow" data-bs-theme="dark" id="layout-sidebar">
        <?php include_if_exists($includesDir . '/sidebar.php'); ?>
    </aside>

    <!-- Main content -->
    <main class="app-main" id="layout-main">

        <div class="app-content-header" id="layout-header">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-sm-6">
                        <h3 class="mb-0"><?= htmlspecialchars($pageTitle, ENT_QUOTES, 'UTF-8') ?></h3>
                    </div>

                    <div class="col-sm-6">
                        <ol class="breadcrumb float-sm-end">
                            <li class="breadcrumb-item">
                                <a href="admin.index.php">Home</a>
                            </li>

                            <li class="breadcrumb-item active">
                                <?= htmlspecialchars($pageTitle, ENT_QUOTES, 'UTF-8') ?>
                            </li>
                        </ol>
                    </div>
                </div>
            </div>
        </div>

        <div class="app-content" id="layout-content">
            <div class="container-fluid">

                <!-- Page content -->
                <?php include_if_exists($includesDir . '/content.php'); ?>

            </div>
        </div>

    </main>

    <!-- Footer -->
    <footer class="app-footer" id="layout-footer">
        <?php include_if_exists($includesDir . '/footer.php'); ?>
    </footer>

    <!-- Modal -->
    <div
        class="modal fade"
        id="exampleModal"
        tabindex="-1"
        aria-labelledby="exampleModalLabel"
        aria-hidden="true"
        style="display: none;"
    >
        <?php include_if_exists($includesDir . '/modal.php'); ?>
    </div>

    <!-- Toast -->
    <div
        id="liveToast"
        class="toast position-fixed bottom-0 end-0 m-3"
        role="alert"
        aria-live="assertive"
        aria-atomic="true"
        style="display: none;"
    >
        <?php include_if_exists($includesDir . '/toast.php'); ?>
    </div>

    <!-- Debug window -->
    <div
        class="offcanvas offcanvas-end"
        tabindex="-1"
        id="debugWindow"
        aria-labelledby="debugWindowLabel"
    >
        <?php include_if_exists($includesDir . '/debugwin.php'); ?>
    </div>

    <!-- Spinner overlay (for spinner tests) -->
    <div
        id="spinnerOverlay"
        class="position-fixed top-0 start-0 w-100 h-100 d-flex align-items-center justify-content-center"
        style="
            background: rgba(0,0,0,0.35);
            z-index: 9999;
            display: none;
        "
        aria-hidden="true"
    >
        <div class="spinner-border text-light" role="status" style="width: 4rem; height: 4rem;">
            <span class="visually-hidden">Loading...</span>
        </div>
    </div>

</div>

<script src="https://cdn.jsdelivr.net/npm/overlayscrollbars@2.11.0/browser/overlayscrollbars.browser.es6.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.11.8/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/admin-lte@4.9.1/dist/js/adminlte.min.js"></script>

<!-- Modular admin tools JS -->
<script src="assets/js/admin-tools.js"></script>

<script>
document.addEventListener('DOMContentLoaded', function () {
    const toastElement = document.getElementById('liveToast');

    if (toastElement) {
        const toast = bootstrap.Toast.getOrCreateInstance(toastElement);
        toast.show();
    }

    // Initialize admin tools (defined in assets/js/admin-tools.js)
    if (typeof window.initAdminTools === 'function') {
        window.initAdminTools();
    }
});
</script>

</body>
</html>
PHP

cat > "${BASE_DIR}/includes/navbar.php" <<'PHP'
<div class="container-fluid">

    <ul class="navbar-nav">
        <li class="nav-item">
            <a
                class="nav-link"
                data-lte-toggle="sidebar"
                href="#"
                role="button"
                aria-label="Toggle sidebar"
            >
                <i class="bi bi-list"></i>
            </a>
        </li>

        <li class="nav-item d-none d-md-block">
            <a href="admin.index.php" class="nav-link">Home</a>
        </li>
    </ul>

    <ul class="navbar-nav ms-auto">
        <li class="nav-item">
            <button
                class="btn btn-outline-primary btn-sm me-2"
                type="button"
                data-bs-toggle="modal"
                data-bs-target="#exampleModal"
            >
                <i class="bi bi-plus-lg"></i>
                New Item
            </button>
        </li>

        <li class="nav-item dropdown">
            <a
                class="nav-link dropdown-toggle"
                href="#"
                data-bs-toggle="dropdown"
                aria-expanded="false"
            >
                <i class="bi bi-person-circle"></i>
                Admin
            </a>

            <ul class="dropdown-menu dropdown-menu-end">
                <li>
                    <a class="dropdown-item" href="#">
                        <i class="bi bi-person me-2"></i>
                        Profile
                    </a>
                </li>

                <li>
                    <a class="dropdown-item" href="#">
                        <i class="bi bi-gear me-2"></i>
                        Settings
                    </a>
                </li>

                <li><hr class="dropdown-divider"></li>

                <li>
                    <a class="dropdown-item text-danger" href="#">
                        <i class="bi bi-box-arrow-right me-2"></i>
                        Sign out
                    </a>
                </li>
            </ul>
        </li>
    </ul>

</div>
PHP

cat > "${BASE_DIR}/includes/sidebar.php" <<'PHP'
<div class="sidebar-brand">
    <a href="admin.index.php" class="brand-link">
        <i class="bi bi-speedometer2 me-2"></i>
        <span class="brand-text fw-light">Admin Portal</span>
    </a>
</div>

<div class="sidebar-wrapper">
    <nav>
        <ul
            class="nav sidebar-menu flex-column"
            data-lte-toggle="treeview"
            role="menu"
        >
            <li class="nav-item">
                <a href="admin.index.php" class="nav-link active">
                    <i class="nav-icon bi bi-speedometer"></i>
                    <p>Dashboard</p>
                </a>
            </li>

            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-people"></i>
                    <p>
                        Users
                        <i class="nav-arrow bi bi-chevron-right"></i>
                    </p>
                </a>

                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <a href="#" class="nav-link">
                            <i class="nav-icon bi bi-circle"></i>
                            <p>All Users</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link">
                            <i class="nav-icon bi bi-circle"></i>
                            <p>Add User</p>
                        </a>
                    </li>
                </ul>
            </li>

            <li class="nav-header">ADMIN</li>

            <!-- Testing -->
            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-play-circle"></i>
                    <p>
                        Testing
                        <i class="nav-arrow bi bi-chevron-right"></i>
                    </p>
                </a>

                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <a href="#" class="nav-link" id="test-toast-btn">
                            <i class="nav-icon bi bi-chat-left-text"></i>
                            <p>Trigger Toast</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a
                            href="#"
                            class="nav-link"
                            data-bs-toggle="modal"
                            data-bs-target="#exampleModal"
                        >
                            <i class="nav-icon bi bi-window-stack"></i>
                            <p>Open Modal</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a
                            href="#debugWindow"
                            class="nav-link"
                            data-bs-toggle="offcanvas"
                            id="toggle-debug-btn"
                        >
                            <i class="nav-icon bi bi-bug"></i>
                            <p>Toggle Debug Window</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="test-spinner-btn">
                            <i class="nav-icon bi bi-arrow-repeat"></i>
                            <p>Test Spinner</p>
                        </a>
                    </li>
                </ul>
            </li>

            <!-- Audit -->
            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-clipboard-data"></i>
                    <p>
                        Audit
                        <i class="nav-arrow bi bi-chevron-right"></i>
                    </p>
                </a>

                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <a href="#" class="nav-link" id="audit-session-btn">
                            <i class="nav-icon bi bi-hdd-network"></i>
                            <p>Session Status</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="audit-layout-btn">
                            <i class="nav-icon bi bi-grid-3x3-gap"></i>
                            <p>Layout Integrity</p>
                        </a>
                    </li>
                </ul>
            </li>

            <!-- UI -->
            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-palette"></i>
                    <p>
                        UI
                        <i class="nav-arrow bi bi-chevron-right"></i>
                    </p>
                </a>

                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-borders-btn">
                            <i class="nav-icon bi bi-square"></i>
                            <p>Toggle Section Borders</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="clear-highlights-btn">
                            <i class="nav-icon bi bi-eraser"></i>
                            <p>Clear All Highlights</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-navbar-vis-btn">
                            <i class="nav-icon bi bi-layout-text-window-reverse"></i>
                            <p>Toggle Navbar Visibility</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-sidebar-vis-btn">
                            <i class="nav-icon bi bi-sidebar"></i>
                            <p>Toggle Sidebar Visibility</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-header-vis-btn">
                            <i class="nav-icon bi bi-file-text"></i>
                            <p>Toggle Header Visibility</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-content-vis-btn">
                            <i class="nav-icon bi bi-card-text"></i>
                            <p>Toggle Content Visibility</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="toggle-footer-vis-btn">
                            <i class="nav-icon bi bi-printer"></i>
                            <p>Toggle Footer Visibility</p>
                        </a>
                    </li>
                </ul>
            </li>

            <!-- Functions / Utilities -->
            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-tools"></i>
                    <p>
                        Functions
                        <i class="nav-arrow bi bi-chevron-right"></i>
                    </p>
                </a>

                <ul class="nav nav-treeview">
                    <li class="nav-item">
                        <a href="#" class="nav-link" id="util-php-info-btn">
                            <i class="nav-icon bi bi-info-circle"></i>
                            <p>PHP Info (basic)</p>
                        </a>
                    </li>

                    <li class="nav-item">
                        <a href="#" class="nav-link" id="util-env-check-btn">
                            <i class="nav-icon bi bi-hdd"></i>
                            <p>Environment Check</p>
                        </a>
                    </li>
                </ul>
            </li>

            <li class="nav-header">SYSTEM</li>

            <li class="nav-item">
                <a href="#" class="nav-link">
                    <i class="nav-icon bi bi-gear"></i>
                    <p>Settings</p>
                </a>
            </li>
        </ul>
    </nav>
</div>
PHP

cat > "${BASE_DIR}/includes/content.php" <<'PHP'
<div class="row">

    <div class="col-lg-3 col-6">
        <div class="small-box text-bg-primary">
            <div class="inner">
                <h3>150</h3>
                <p>New Orders</p>
            </div>

            <i class="small-box-icon bi bi-cart"></i>

            <a href="#" class="small-box-footer">
                More info
                <i class="bi bi-arrow-right"></i>
            </a>
        </div>
    </div>

    <div class="col-lg-3 col-6">
        <div class="small-box text-bg-success">
            <div class="inner">
                <h3>53<sup class="fs-5">%</sup></h3>
                <p>Bounce Rate</p>
            </div>

            <i class="small-box-icon bi bi-bar-chart"></i>

            <a href="#" class="small-box-footer">
                More info
                <i class="bi bi-arrow-right"></i>
            </a>
        </div>
    </div>

    <div class="col-lg-3 col-6">
        <div class="small-box text-bg-warning">
            <div class="inner">
                <h3>44</h3>
                <p>User Registrations</p>
            </div>

            <i class="small-box-icon bi bi-person-plus"></i>

            <a href="#" class="small-box-footer">
                More info
                <i class="bi bi-arrow-right"></i>
            </a>
        </div>
    </div>

    <div class="col-lg-3 col-6">
        <div class="small-box text-bg-danger">
            <div class="inner">
                <h3>65</h3>
                <p>Unique Visitors</p>
            </div>

            <i class="small-box-icon bi bi-people"></i>

            <a href="#" class="small-box-footer">
                More info
                <i class="bi bi-arrow-right"></i>
            </a>
        </div>
    </div>

</div>

<div class="card">
    <div class="card-header">
        <h3 class="card-title">System Status</h3>

        <div class="card-tools">
            <button
                class="btn btn-tool"
                type="button"
                data-bs-toggle="collapse"
                data-bs-target="#activityCard"
                aria-expanded="true"
            >
                <i class="bi bi-dash"></i>
            </button>
        </div>
    </div>

    <div id="activityCard" class="collapse show">
        <div class="card-body">
            <p class="mb-0">
                Use the Admin menu in the sidebar to run tests, audits, UI tweaks, and utility checks.
            </p>
        </div>
    </div>
</div>
PHP

cat > "${BASE_DIR}/includes/footer.php" <<'PHP'
<strong>
    Copyright &copy; <?= date('Y') ?>
    <a href="#">Your Company</a>.
</strong>

All rights reserved.

<div class="float-end d-none d-sm-inline">
    AdminLTE PHP Scaffold
</div>
PHP

cat > "${BASE_DIR}/includes/modal.php" <<'PHP'
<div class="modal-content">

    <div class="modal-header">
        <h5 class="modal-title" id="exampleModalLabel">
            Create Item
        </h5>

        <button
            type="button"
            class="btn-close"
            data-bs-dismiss="modal"
            aria-label="Close"
        ></button>
    </div>

    <form method="post" action="#">
        <div class="modal-body">
            <div class="mb-3">
                <label for="itemName" class="form-label">
                    Item name
                </label>

                <input
                    type="text"
                    name="item_name"
                    id="itemName"
                    class="form-control"
                    required
                >
            </div>

            <div class="mb-3">
                <label for="itemDescription" class="form-label">
                    Description
                </label>

                <textarea
                    name="description"
                    id="itemDescription"
                    class="form-control"
                    rows="3"
                ></textarea>
            </div>
        </div>

        <div class="modal-footer">
            <button
                type="button"
                class="btn btn-secondary"
                data-bs-dismiss="modal"
            >
                Cancel
            </button>

            <button type="submit" class="btn btn-primary">
                Save Item
            </button>
        </div>
    </form>

</div>
PHP

cat > "${BASE_DIR}/includes/toast.php" <<'PHP'
<?php
$toastMessage = $_SESSION['toast_message'] ?? null;
$toastType    = $_SESSION['toast_type'] ?? 'success';
unset($_SESSION['toast_message'], $_SESSION['toast_type']);
?>

<?php if ($toastMessage): ?>
    <div class="toast-header">
        <i class="bi bi-check-circle-fill text-<?= htmlspecialchars($toastType, ENT_QUOTES, 'UTF-8') ?> me-2"></i>
        <strong class="me-auto">Notification</strong>

        <button
            type="button"
            class="btn-close"
            data-bs-dismiss="toast"
            aria-label="Close"
        ></button>
    </div>

    <div class="toast-body">
        <?= htmlspecialchars($toastMessage, ENT_QUOTES, 'UTF-8') ?>
    </div>
<?php endif; ?>
PHP

cat > "${BASE_DIR}/includes/debugwin.php" <<'PHP'
<div class="offcanvas-header bg-dark text-white">
    <h5 class="offcanvas-title" id="debugWindowLabel">
        <i class="bi bi-bug me-2"></i>
        Debug Window
    </h5>

    <button
        type="button"
        class="btn-close btn-close-white"
        data-bs-dismiss="offcanvas"
        aria-label="Close"
    ></button>
</div>

<div class="offcanvas-body">
    <div class="mb-3">
        <strong>Request method:</strong>
        <?= htmlspecialchars($_SERVER['REQUEST_METHOD'] ?? '', ENT_QUOTES, 'UTF-8') ?>
    </div>

    <div class="mb-3">
        <strong>Request URI:</strong>
        <?= htmlspecialchars($_SERVER['REQUEST_URI'] ?? '', ENT_QUOTES, 'UTF-8') ?>
    </div>

    <div class="mb-3">
        <strong>PHP version:</strong>
        <?= htmlspecialchars(PHP_VERSION, ENT_QUOTES, 'UTF-8') ?>
    </div>

    <hr>

    <h6>GET data</h6>
    <pre class="debug-output"><?= htmlspecialchars(print_r($_GET, true), ENT_QUOTES, 'UTF-8') ?></pre>

    <h6>POST data</h6>
    <pre class="debug-output"><?= htmlspecialchars(print_r($_POST, true), ENT_QUOTES, 'UTF-8') ?></pre>

    <h6>Session data</h6>
    <pre class="debug-output"><?= htmlspecialchars(print_r($_SESSION ?? [], true), ENT_QUOTES, 'UTF-8') ?></pre>
</div>
PHP

cat > "${BASE_DIR}/assets/css/custom.css" <<'CSS'
.app-content {
    min-height: calc(100vh - 130px);
}

.debug-output {
    max-height: 180px;
    overflow: auto;
    padding: 0.75rem;
    border-radius: 0.375rem;
    background: #212529;
    color: #d1e7dd;
    font-size: 0.8rem;
    white-space: pre-wrap;
}

.small-box .small-box-icon {
    font-size: 4rem;
    opacity: 0.25;
}

/* Debug layout: colored borders around sections */
.debug-layout-border#layout-navbar {
    outline: 3px solid #e74c3c; /* red */
    outline-offset: -3px;
}

.debug-layout-border#layout-sidebar {
    outline: 3px solid #3498db; /* blue */
    outline-offset: -3px;
}

.debug-layout-border#layout-header {
    outline: 3px solid #2ecc71; /* green */
    outline-offset: -3px;
}

.debug-layout-border#layout-content {
    outline: 3px solid #f39c12; /* orange */
    outline-offset: -3px;
}

.debug-layout-border#layout-footer {
    outline: 3px solid #9b59b6; /* purple */
    outline-offset: -3px;
}
CSS

cat > "${BASE_DIR}/assets/js/admin-tools.js" <<'JS'
/**
 * Admin tools – modular JS for testing, audit, UI, and utilities.
 *
 * Exposes:
 *   window.initAdminTools()
 */
(function () {
    'use strict';

    const layoutIds = [
        'layout-navbar',
        'layout-sidebar',
        'layout-header',
        'layout-content',
        'layout-footer'
    ];

    function showAuditMessage(title, lines) {
        const toastEl = document.getElementById('liveToast');
        if (!toastEl) return;

        const header = toastEl.querySelector('.toast-header');
        const body = toastEl.querySelector('.toast-body');
        if (!header || !body) return;

        header.innerHTML =
            '<i class="bi bi-clipboard-data-fill text-info me-2"></i>' +
            '<strong class="me-auto">' + title + '</strong>' +
            '<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>';

        body.innerHTML = lines.join('<br>');

        const toast = bootstrap.Toast.getOrCreateInstance(toastEl, { delay: 6000 });
        toast.show();
    }

    function checkSessionStatus() {
        // Basic session checks using what PHP exposes via the page.
        // If you want more detail, you can add a small JSON endpoint later.
        const hasSessionCookie = (document.cookie && document.cookie.length > 0);
        const statusLine = hasSessionCookie
            ? 'Session cookie: present'
            : 'Session cookie: not detected';

        showAuditMessage('Session Status', [
            statusLine,
            'If tests fail, ensure the session directory exists and is writable.'
        ]);
    }

    function checkLayoutIntegrity() {
        const missing = [];
        layoutIds.forEach(function (id) {
            if (!document.getElementById(id)) {
                missing.push(id);
            }
        });

        if (missing.length === 0) {
            showAuditMessage('Layout Integrity', ['All required layout sections are present.']);
        } else {
            showAuditMessage('Layout Integrity', [
                'Missing layout sections:',
                missing.join(', ')
            ]);
        }
    }

    function showPhpInfoBasic() {
        const lines = [
            'User agent: ' + navigator.userAgent,
            'Language: ' + navigator.language,
            'Platform: ' + navigator.platform,
            'Cookies enabled: ' + navigator.cookieEnabled,
            'Online: ' + navigator.onLine
        ];
        showAuditMessage('PHP Info (basic)', lines);
    }

    function showEnvCheck() {
        const lines = [
            'Bootstrap Toast: ' + (typeof bootstrap !== 'undefined' ? 'yes' : 'no'),
            'jQuery: ' + (typeof jQuery !== 'undefined' ? 'yes' : 'no'),
            'Admin tools loaded: yes'
        ];
        showAuditMessage('Environment Check', lines);
    }

    function clearAllHighlights() {
        // Remove border highlights
        layoutIds.forEach(function (id) {
            const el = document.getElementById(id);
            if (el) {
                el.classList.remove('debug-layout-border');
            }
        });

        // Reset any inline display toggles we applied via visibility buttons
        layoutIds.forEach(function (id) {
            const el = document.getElementById(id);
            if (el) {
                el.style.display = '';
            }
        });
    }

    function initAdminTools() {
        // Trigger toast test
        const toastBtn = document.getElementById('test-toast-btn');
        if (toastBtn) {
            toastBtn.addEventListener('click', function (e) {
                e.preventDefault();
                const toastEl = document.getElementById('liveToast');
                if (!toastEl) return;

                const header = toastEl.querySelector('.toast-header');
                const body = toastEl.querySelector('.toast-body');
                if (header && body) {
                    header.innerHTML =
                        '<i class="bi bi-info-circle-fill text-info me-2"></i>' +
                        '<strong class="me-auto">Test Toast</strong>' +
                        '<button type="button" class="btn-close" data-bs-dismiss="toast" aria-label="Close"></button>';
                    body.textContent = 'This is a test toast message triggered from the sidebar.';
                }
                const toast = bootstrap.Toast.getOrCreateInstance(toastEl, { delay: 2500 });
                toast.show();
            });
        }

        // Audit: session status
        const sessionBtn = document.getElementById('audit-session-btn');
        if (sessionBtn) {
            sessionBtn.addEventListener('click', function (e) {
                e.preventDefault();
                checkSessionStatus();
            });
        }

        // Audit: layout integrity
        const layoutBtn = document.getElementById('audit-layout-btn');
        if (layoutBtn) {
            layoutBtn.addEventListener('click', function (e) {
                e.preventDefault();
                checkLayoutIntegrity();
            });
        }

        // UI: toggle borders
        let bordersOn = false;
        const bordersBtn = document.getElementById('toggle-borders-btn');
        if (bordersBtn) {
            bordersBtn.addEventListener('click', function (e) {
                e.preventDefault();
                bordersOn = !bordersOn;
                layoutIds.forEach(function (id) {
                    const el = document.getElementById(id);
                    if (el) {
                        el.classList.toggle('debug-layout-border', bordersOn);
                    }
                });
            });
        }

        // UI: clear all highlights
        const clearBtn = document.getElementById('clear-highlights-btn');
        if (clearBtn) {
            clearBtn.addEventListener('click', function (e) {
                e.preventDefault();
                clearAllHighlights();
            });
        }

        // UI: toggle visibility helpers
        function toggleVisibility(id) {
            const el = document.getElementById(id);
            if (!el) return;
            const visible = getComputedStyle(el).display !== 'none';
            el.style.display = visible ? 'none' : '';
        }

        const visMap = {
            'toggle-navbar-vis-btn': 'layout-navbar',
            'toggle-sidebar-vis-btn': 'layout-sidebar',
            'toggle-header-vis-btn': 'layout-header',
            'toggle-content-vis-btn': 'layout-content',
            'toggle-footer-vis-btn': 'layout-footer'
        };

        Object.keys(visMap).forEach(function (btnId) {
            const btn = document.getElementById(btnId);
            if (!btn) return;
            btn.addEventListener('click', function (e) {
                e.preventDefault();
                toggleVisibility(visMap[btnId]);
            });
        });

        // Functions: PHP info basic
        const phpInfoBtn = document.getElementById('util-php-info-btn');
        if (phpInfoBtn) {
            phpInfoBtn.addEventListener('click', function (e) {
                e.preventDefault();
                showPhpInfoBasic();
            });
        }

        // Functions: env check
        const envBtn = document.getElementById('util-env-check-btn');
        if (envBtn) {
            envBtn.addEventListener('click', function (e) {
                e.preventDefault();
                showEnvCheck();
            });
        }

        // Testing: spinner
        const spinnerBtn = document.getElementById('test-spinner-btn');
        const spinnerOverlay = document.getElementById('spinnerOverlay');

        if (spinnerBtn && spinnerOverlay) {
            spinnerBtn.addEventListener('click', function (e) {
                e.preventDefault();
                spinnerOverlay.style.display = 'flex';
                spinnerOverlay.setAttribute('aria-hidden', 'false');

                // Auto-hide after 2 seconds
                setTimeout(function () {
                    spinnerOverlay.style.display = 'none';
                    spinnerOverlay.setAttribute('aria-hidden', 'true');
                }, 2000);
            });
        }
    }

    // Expose initializer
    window.initAdminTools = initAdminTools;
})();
JS

cat > "${BASE_DIR}/index.php" <<'PHP'
<?php

declare(strict_types=1);

// Session setup – same pattern as before
ini_set('session.save_path', '/Users/rbutare/websites/system/tmp/sessions');
session_start();

$pageTitle = 'Dashboard';

require __DIR__ . '/admin.index.php';
PHP

cat > "${BASE_DIR}/README.md" <<'EOF'
# AdminLTE PHP Scaffold (Tools v2)

- `admin.index.php` – locked semantic HTML scaffold (do not edit per app).
- `includes/*` – fragments only (navbar, sidebar, content, footer, modal, toast, debugwin).
- `assets/js/admin-tools.js` – modular JS for:
  - Testing (toast, modal, debug window, spinner)
  - Audit (session status, layout integrity)
  - UI (borders, clear highlights, visibility toggles)
  - Functions (basic PHP info, environment check)

## Sidebar organization

Under **Admin**:

- **Testing**
  - Trigger Toast
  - Open Modal
  - Toggle Debug Window
  - Test Spinner
- **Audit**
  - Session Status
  - Layout Integrity
- **UI**
  - Toggle Section Borders
  - Clear All Highlights
  - Toggle visibility of navbar, sidebar, header, content, footer
- **Functions**
  - PHP Info (basic)
  - Environment Check

## Notes

- Session path is set in `admin.index.php` and `index.php`:
  ```php
  ini_set('session.save_path', '/Users/rbutare/websites/system/tmp/sessions');
  ```
  Ensure this directory exists and is writable.

## Run locally

```bash
php -S localhost:8000 -t .
```

Then open:

http://localhost:8000
EOF

chmod -R u+rwX,go+rX "${BASE_DIR}"

echo
echo "Installation complete."
echo
echo "Created:"
find "${BASE_DIR}" -type f | sort
echo
echo "Start the PHP development server with:"
echo "  cd ${BASE_DIR}"
echo "  php -S localhost:8000"
echo
echo "Then open: http://localhost:8000"
