pragma ComponentBehavior: Bound

import QtQuick
import Quickshell
import qs.components
import qs.modules.bar.popouts // Need to import this module so the Wrapper type is the same as others

Item {
    id: root

    required property ShellScreen screen
    required property real borderThickness

    readonly property alias content: content
    property real offsetScale: y > 0 || content.hasCurrent ? 0 : 1

    visible: width > 0 && height > 0
    clip: true

    // NoSignal top bar: popouts drop DOWN from the bar. The collapsing axis is
    // now height (was width for the vertical left bar); position along the bar
    // is x (from the hovered widget's x-centre), the docked edge is the top.
    implicitWidth: content.implicitWidth
    implicitHeight: content.implicitHeight * (1 - offsetScale)

    y: content.isDetached ? (parent.height - content.nonAnimHeight) / 2 : 0
    x: {
        if (content.isDetached)
            return (parent.width - content.nonAnimWidth) / 2;

        const off = content.currentCenter - borderThickness - content.nonAnimWidth / 2;
        const diff = parent.width - Math.floor(off + content.nonAnimWidth);
        if (diff < 0)
            return off + diff;
        return Math.max(off, 0);
    }

    Behavior on offsetScale {
        Anim {}
    }

    Behavior on y {
        Anim {
            duration: content.animLength
            easing: content.animCurve
        }
    }

    Behavior on x {
        enabled: root.offsetScale < 1

        Anim {
            duration: content.animLength
            easing: content.animCurve
        }
    }

    Wrapper {
        id: content

        screen: root.screen
        offsetScale: root.offsetScale

        anchors.horizontalCenter: parent.horizontalCenter
        anchors.top: parent.top
        anchors.topMargin: (-implicitHeight - 5) * root.offsetScale
    }
}
