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

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

HTile {
    id: account
    backgroundColor: theme.mainPane.listView.account.background

    contentItem: ContentRow {
        tile: account
        spacing: 0
        opacity:
            collapsed ? theme.mainPane.listView.account.collapsedOpacity : 1

        Behavior on opacity { HNumberAnimation {} }

        HUserAvatar {
            id: avatar
            userId: model.id
            displayName: model.display_name
            mxc: model.avatar_url
            radius: theme.mainPane.listView.account.avatarRadius
            compact: account.compact

            Layout.alignment: Qt.AlignCenter

            HLoader {
                anchors.fill: parent
                z: 9998
                opacity: model.first_sync_done ? 0 : 1
                active: opacity > 0

                sourceComponent: Rectangle {
                    radius: avatar.radius
                    color: utils.hsluv(0, 0, 0, 0.6)

                    HBusyIndicator {
                        anchors.centerIn: parent
                        width: parent.width / 2
                        height: width
                    }
                }

                Behavior on opacity { HNumberAnimation {} }
            }

            MessageIndicator {
                id: totalMessageIndicator
                anchors.right: parent.right
                anchors.bottom: parent.bottom
                z: 9999

                indicatorTheme:
                    theme.mainPane.accountBar.account.unreadIndicator
                unreads: model.total_unread
                highlights: model.total_highlights
                localUnreads: model.local_unreads
                localHighlights: model.local_highlights
            }

        }

        TitleLabel {
            id: title
            text: model.display_name || model.id
            color:
                hovered ?
                utils.nameColor(
                    model.display_name || model.id.substring(1),
                ) :
                theme.mainPane.listView.account.name

            Behavior on color { HColorAnimation {} }

            Layout.leftMargin: theme.spacing
        }

        HButton {
            id: addChat
            iconItem.small: true
            icon.name: "add-chat"
            backgroundColor: "transparent"
            toolTip.text: qsTr("Add new chat")
            onClicked: pageLoader.showPage(
                "AddChat/AddChat", {userId: model.id},
            )

            leftPadding: theme.spacing
            rightPadding: theme.spacing / 1.75

            Layout.fillHeight: true
            Layout.maximumWidth:
                account.width >= 100 * theme.uiScale ?  implicitWidth : 0

            HShortcut {
                enabled: enableKeybinds
                sequences: window.settings.keys.addNewChat
                onActivated: addChat.clicked()
            }
        }

        HButton {
            id: expand
            iconItem.small: true
            icon.name: "expand"
            backgroundColor: "transparent"
            toolTip.text: collapsed ? qsTr("Expand") : qsTr("Collapse")
            onClicked: account.toggleCollapse()

            leftPadding: theme.spacing / 1.75
            rightPadding: theme.spacing

            visible: Layout.maximumWidth > 0

            Layout.fillHeight: true
            Layout.maximumWidth:
                ! filterActive && account.width >= 120 * theme.uiScale ?
                implicitWidth :
                0

            iconItem.transform: Rotation {
                origin.x: expand.iconItem.width / 2
                origin.y: expand.iconItem.height / 2
                angle: expand.loading ? 0 : collapsed ? 180 : 90

                Behavior on angle { HNumberAnimation {} }
            }

            Behavior on Layout.maximumWidth { HNumberAnimation {} }
        }
    }

    contextMenu: AccountContextMenu { userId: model.id }


    property bool enableKeybinds: false
    property bool filterActive: false

    readonly property bool collapsed:
        (window.uiState.collapseAccounts[model.id] || false) &&
        ! filterActive

    readonly property alias avatar: title
    readonly property alias totalMessageIndicator: totalMessageIndicator
    readonly property alias title: title
    readonly property alias addChat: addChat
    readonly property alias expand: expand


    function setCollapse(collapse) {
        window.uiState.collapseAccounts[model.id] = collapse
        window.uiStateChanged()

        py.callCoro("set_account_collapse", [model.id, collapse])
    }

    function toggleCollapse() {
        setCollapse(! collapsed)
    }


    HShortcut {
        enabled: enableKeybinds
        sequences: window.settings.keys.accountSettings
        onActivated: leftClicked()
    }

    HShortcut {
        enabled: enableKeybinds
        sequences: window.settings.keys.toggleCollapseAccount
        onActivated: toggleCollapse()
    }
}
