import QtQuick
import QtQuick.Shapes
import QtQuick.Effects

Item {
    id: throbberRoot

    Rectangle {
        anchors.fill: parent
        color: "transparent"

        Item
        {
            id: outerRing
            anchors.fill: parent

            Shape
            {
                anchors.fill: parent
                asynchronous: true

                ShapePath
                {
                    property double progress: 0
                    property int dashSpaceLength: 15
                    property int dashLength: 1

                    id: outerRingPath
                    strokeColor: palette.accent.darker(1 + (progress - 0.25))
                    fillColor: "transparent"
                    strokeWidth: 3
                    strokeStyle: ShapePath.DashLine

                    startX: 0
                    startY: outerRing.height * 0.5

                    dashPattern: [
                        dashSpaceLength - (dashSpaceLength * progress),
                        dashSpaceLength * progress
                    ]

                    PathArc
                    {
                        x: outerRing.width
                        y: outerRing.height * 0.5

                        radiusX: outerRing.width / 2
                        radiusY: outerRing.height / 2

                        useLargeArc: false
                    }

                    PathArc
                    {
                        x: 0
                        y: outerRing.height * 0.5

                        radiusX: outerRing.width / 2
                        radiusY: outerRing.height / 2

                        useLargeArc: false
                    }
                }
            }

            transform: Rotation {
                id: outerRingRotation
                origin.x: outerRing.width / 2
                origin.y: outerRing.height / 2
            }

            NumberAnimation {
                property bool reverse: false

                target: outerRingPath
                property: "progress"
                duration: 1600
                //easing.type: Easing.InOutQuad

                from: 0
                to: 1
                loops: 1
                running: true

                onFinished: () => {
                    if(reverse)
                    {
                        from = 0
                        to = 1
                        start()
                    }
                    else
                    {
                        from = 1
                        to = 0
                        start()
                    }

                    reverse = !reverse
                }
            }

            NumberAnimation {
                target: outerRingRotation
                property: "angle"
                duration: 16000
                easing.type: Easing.InOutQuad

                from: 0
                to: (360 * 4)
                loops: NumberAnimation.Infinite
                running: true
            }
        }

        MultiEffect {
            source: outerRing
            anchors.fill: outerRing
            brightness: 0.4
            saturation: 0.2
            blurEnabled: true
            blurMax: 64
            blur: 1.0
        }
    }
}
