// SPDX-FileCopyrightText: 2026, Shaun Reed <shaunrd0@gmail.com>
//
// SPDX-License-Identifier: GNU General Public License v3.0 or later

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

import clide.module 1.0
import Logger 1.0

SplitView {
    id: root

    // Path to the directory of the project opened in clide.
    required property string projectDir

    anchors.fill: parent

    // Customized handle to drag between the Navigation and the Editor.
    handle: ClideHandle {
        id: verticalSplitHandle

        hovered: SplitHandle.hovered
        pressed: SplitHandle.pressed
    }

    Rectangle {
        id: navigationView

        SplitView.fillHeight: true
        SplitView.maximumWidth: 250
        SplitView.minimumWidth: 0
        SplitView.preferredWidth: 200
        color: RustColors.explorer_background
        radius: 20

        ColumnLayout {
            spacing: 2

            ClideBreadCrumbs {
                id: breadCrumb

                Layout.bottomMargin: 5
                Layout.leftMargin: 15
                Layout.topMargin: 5
                path: clideTreeView.rootDirectory

                onCrumbClicked: path => {
                    Logger.trace("Crumb clicked: " + path);
                    clideTreeView.rootDirectory = path;
                }
            }
            ClideTreeView {
                id: clideTreeView

                height: navigationView.height

                // Path to the directory opened in the file explorer.
                originalRootDirectory: root.projectDir
                rootDirectory: root.projectDir
                width: navigationView.width

                onFileClicked: path => clideEditor.filePath = path
                onRootDirectoryChanged: {
                    Logger.log("Setting root directory: " + clideTreeView.rootDirectory);
                    breadCrumb.path = clideTreeView.rootDirectory;
                }
            }
        }
    }
    ClideEditorView {
        id: clideEditor

        SplitView.fillWidth: true

        // Provide a path to the file currently open in the text editor.
        // Initialized using the Default trait in Rust QML singleton FileSystem.
        filePath: FileSystem.filePath
    }
}
