// Bootstrap window.app for the browse tool. Mirrors the convention
// used by every other ZDDC tool — ./build's CSS/JS concat order means
// this file runs FIRST inside the IIFE-of-IIFEs.
(function () {
    'use strict';

    if (!window.app) {
        window.app = { modules: {}, state: {} };
    }

    window.app.state = {
        // Source: 'server' | 'fs' | null. Determines how the loader
        // resolves entries.
        source: null,

        // For server-source: the URL path of the directory currently
        // being viewed. Always starts with '/' and ends with '/'.
        // For fs-source: the displayed path string (no semantic
        // meaning — just for the toolbar).
        currentPath: '/',

        // FileSystemAccessAPI root handle (null in server mode).
        rootHandle: null,

        // Sort state. key: 'name' | 'size' | 'ext' | 'date'. dir: 1 or -1.
        sort: { key: 'name', dir: 1 },

        // Currently-selected tree node id (for highlight + pop-out).
        selectedId: null,
        lastPreviewedNodeId: null,

        // View mode: 'browse' (tree + preview, default) | 'grid' (classifier).
        viewMode: 'browse',

        // The tree's in-memory representation. Each node:
        //   { id, name, isDir, size, modTime, ext, url, depth,
        //     parentId, expanded, loaded, childIds, isZip, zipFile,
        //     zipPath }
        // - isZip:   set when the node IS a .zip file we know how to
        //            expand inline (server file or FS handle).
        // - zipFile: cached JSZip instance for this archive (set
        //            after first expand).
        // - zipPath: relative path WITHIN a zip (set on virtual
        //            children of an expanded zip; null otherwise).
        // Stored flat in a Map keyed by id; render order derived
        // from a depth-first walk.
        nodes: new Map(),
        rootIds: [],
        nextId: 1,

        // Single shared popup window for file preview (across
        // multiple file clicks). Same pattern as archive's preview.
        previewWindow: null
    };
})();
