// Copyright (C) 2023 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
pragma ComponentBehavior: Bound
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts

Pane {
    id: root
    anchors.fill: parent

    property double totalProgress: 0
    property int totalTimeRemaining: -1
    property string stage : "Preparing..."

    function clearText() {
        textArea.clear();
    }

    function update(payload) {
        if ("message" in payload && typeof payload.message === "string" && payload.message) {
            textArea.insert(textArea.length, payload.message + "\n");
        }

        if ("totalProgress" in payload && typeof payload.totalProgress === "number") {
            root.totalProgress = payload.totalProgress;
        }

        if ("totalTimeRemaining" in payload && typeof payload.totalTimeRemaining === "number") {
            root.totalTimeRemaining = payload.totalTimeRemaining;
        }

        if ("stage" in payload && typeof payload.stage === "string") {
            root.stage = payload.stage;
        }
    }

    function formatDuration(milliseconds, showMilliseconds = true) {
        if (milliseconds < 0)
            return " Estimating..."
        const partSeconds = Math.floor(milliseconds / 1000) % 60;
        const partMinutes = Math.floor(milliseconds / 60000) % 60;
        const partHours = Math.floor(milliseconds / 3600000) % 60;

        if (partHours > 0) {
            return partHours + "h " + partMinutes + "m " + partSeconds + "s";
        }
        if (partMinutes > 0) {
            return partMinutes + "m " + partSeconds + "s";
        }
        if (partSeconds > 0) {
            return partSeconds + "s";
        }
        return "0s";
    }

    ColumnLayout {
        anchors.fill: parent

        RowLayout {
            Label {
                padding: 0
                text: root.stage
            }
            Item {
                Layout.fillWidth: true
            }
            Label {
                padding: 0
                text: (root.totalProgress * 100).toFixed(0) + "%"
            }
        }

        ProgressBar {
            Layout.fillWidth: true
            value: root.totalProgress
        }

        RowLayout {
            Label {
                padding: 0
                text: totalTimeRemaining > 0 ? "Remaining: " + root.formatDuration(root.totalTimeRemaining) : ""
            }
            Item {
                Layout.fillWidth: true
            }
        }

        Frame {
            Layout.fillWidth: true
            Layout.fillHeight: true
            ScrollView {
                width: parent.width
                height: parent.height
                id: scroll
                TextArea {
                    id: textArea
                    width: parent.width
                    height: parent.height
                    readOnly: true
                    placeholderText: qsTr("Qt Lightmapper")
                    font.pixelSize: 12
                    wrapMode: Text.WordWrap
                }
            }
        }

        Button {
            objectName: "cancelButton"
            Layout.fillWidth: true
            text: "Cancel"
        }
    }
}
