// SPDX-License-Identifier: LGPL-3.0-or-later

import QtQuick 2.12
import QtQuick.Layouts 1.12
import "../../../Base"

HBox {
        color: theme.chat.roomPane.roomSettings.background

    buttonModel: [
        {
            name: "apply",
            text: qsTr("Save"),
            iconName: "apply",
            // enabled: anyChange, TODO
            enabled: false,
            loading: saveFuture !== null,
            disableWhileLoading: false,
        },
        {
            name: "cancel",
            text: qsTr("Cancel"),
            iconName: "cancel",
            enabled: anyChange || saveFuture !== null,
        },
    ]

    buttonCallbacks: ({
        apply: button => {
            if (saveFuture) saveFuture.cancel()
            // TODO
        },

        cancel: button => {
            if (saveFuture) {
                saveFuture.cancel()
                saveFuture = null
            }

            nameField.reset()
            topicField.reset()
            encryptCheckBox.reset()
            requireInviteCheckbox.reset()
            forbidGuestsCheckBox.reset()
        },
    })


    property var saveFuture: null

    readonly property bool anyChange:
        nameField.changed || topicField.changed || encryptCheckBox.changed ||
        requireInviteCheckbox.changed || forbidGuestsCheckBox.changed


    HRoomAvatar {
        id: avatar
        roomId: chat.roomId
        displayName: chat.roomInfo.display_name
        mxc: chat.roomInfo.avatar_url
        // enabled: chat.roomInfo.can_set_avatar  # put this in "change avatar"

        Layout.fillWidth: true
        Layout.preferredHeight: width
        Layout.maximumWidth: 256 * theme.uiScale
    }

    HTextField {
        id: nameField
        placeholderText: qsTr("Room name")
        maximumLength: 255
        defaultText: chat.roomInfo.given_name
        enabled: chat.roomInfo.can_set_name

        Layout.fillWidth: true
    }

    HScrollableTextArea {
        id: topicField
        placeholderText: qsTr("Room topic")
        defaultText: chat.roomInfo.plain_topic
        enabled: chat.roomInfo.can_set_topic

        Layout.fillWidth: true
    }

    HCheckBox {
        id: encryptCheckBox
        text: qsTr("Encrypt messages")
        subtitle.text:
            qsTr("Only you and those you trust will be able to read the " +
                 "conversation") +
            `<br><font color="${theme.colors.warningText}">` +
            (
                chat.roomInfo.encrypted ?
                qsTr("Cannot be disabled") :
                qsTr("Cannot be disabled later!")
            ) +
            "</font>"
        subtitle.textFormat: Text.StyledText
        defaultChecked: chat.roomInfo.encrypted
        enabled: chat.roomInfo.can_set_encryption && ! chat.roomInfo.encrypted

        Layout.fillWidth: true
    }

    HCheckBox {
        id: requireInviteCheckbox
        text: qsTr("Require being invited")
        subtitle.text: qsTr("Users will need an invite to join the room")
        defaultChecked: chat.roomInfo.invite_required
        enabled: chat.roomInfo.can_set_join_rules

        Layout.fillWidth: true
    }

    HCheckBox {
        id: forbidGuestsCheckBox
        text: qsTr("Forbid guests")
        subtitle.text: qsTr("Users without an account won't be able to join")
        defaultChecked: ! chat.roomInfo.guests_allowed
        enabled: chat.roomInfo.can_set_guest_access

        Layout.fillWidth: true
    }

    // HCheckBox {  TODO
        // text: qsTr("Make this room visible in the public room directory")
        // checked: chat.roomInfo.published_in_directory

        // Layout.fillWidth: true
    // }

    HSpacer {}
}