/*!
 *
 * Copyright (c) 2020-2025 Diality Inc. - All Rights Reserved.
 * \copyright
 * THIS CODE MAY NOT BE COPIED OR REPRODUCED IN ANY FORM, IN PART OR IN
 * WHOLE, WITHOUT THE EXPLICIT PERMISSION OF THE COPYRIGHT OWNER.
 *
 * \file    StoppedSlider.qml
 * \author  (last)      Stephen Quong
 * \date    (last)      20-Aug-2025
 * \author  (original)  Stephen Quong
 * \date    (original)  20-Aug-2025
 *
 */

// Qt
import QtQuick 2.12

// Project
//  Qml imports
import "qrc:/globals"
import "qrc:/components"

/*!
 * \brief   Slider component with a title and the currently selected value
 */
Item { id: _root
    property alias  decimal     : _slider.decimal
    property alias  minimum     : _slider.minimum
    property alias  maximum     : _slider.maximum
    property alias  minStop     : _slider.minStop
    property alias  value       : _slider.value
    property alias defaultValue : _slider.defaultValue
    property alias  step        : _slider.step
    property string unit        : ""
    property bool   active      : false

    signal pressed ()
    signal released()

    function reset(vValue) {
        _slider.reset(vValue)
    }

    function setActiveValid() {
        _root.active = true
    }

    Slider { id : _slider
        objectName              : _root.objectName + "Slider"
        anchors {
            left                : parent.left
            right               : _sliderArrows.left
            rightMargin         : 60
            verticalCenter      : _sliderArrows.verticalCenter
        }
        height                  : Variables.ultraFiltrationProgressBarHeight
        bgColor                 : Colors.ufAdjustmentProgressBarBg
        highlightActiveColor    : Colors.ufAdjustmentDeltaFill
        handlerActiveColor      : Colors.backgroundButtonSelect
        hasBorder               : false
        diameter                : Variables.progressbarHandler
        touchMargin             : Variables.sliderDefaultBodyHeight
        handler.z               : 5
        isActive                : _root.active
        stepSnap                : true
        ticks                   : true
        radius                  : 0
        onPressed               : { _root.pressed () }
        onReleased              : { _root.released() }
        onHandleSelected        : { setActiveValid() }
        onSliderSelected        : { setActiveValid() }
        minText {
            font {
                pixelSize   : Fonts.fontPixelButton
                weight      : Font.Normal
            }
            color           : Colors.progressBarMinMax
            text            : _root.minimum.toFixed(_root.decimal) + (_root.unit.length ? (" " + _root.unit) : "")
        }
        maxText {
            font {
                pixelSize   : minText.font.pixelSize
                weight      : minText.font.weight
            }
            color           : Colors.progressBarMinMax
            text            : _root.maximum.toFixed(_root.decimal) + (_root.unit.length ? (" " + _root.unit) : "")
        }

        Rectangle { id: _removedFill
            anchors {
                top         : parent.top
                bottom      : parent.bottom
                left        : parent.left
                right       : _lowMarker.right
                // adjust margin so fill completely covers the underlying slider
                leftMargin  : -1
            }
            z       : _lowMarker.z - 1
            color   : Colors.ufProgressBarFill
        }

        RangeMarker { id: _lowMarker
            x               : (_slider.width * ((value - _slider.minimum) / (_slider.maximum - _slider.minimum))) - ((width+1)/2)
            z               : _slider.handler.z - 1
            width           : Variables.ultrafiltrationRangeMarkerWidth
            height          : Variables.rangeMarkerHeight
            hasHandle       : true
            valueOnTop      : true
            decimal         : Variables.ultrafiltrationPrecision
            value           : Math.max(_root.minStop, _root.minimum)
            handle.width    : Variables.ultrafiltrationRangeMarkerHandleWidth
            text {
                anchors.bottomMargin: _lowMarker.valueOnTop ? 15 : 0
                font {
                    pixelSize: Fonts.fontPixelUltrafiltrationRangeMarker
                    weight: Font.DemiBold
                }
            }
        }
    }

    SliderArrows{ id:_sliderArrows
        anchors {
            verticalCenter  : _slider.verticalCenter
            right           : parent.right
        }

        onIncrementValue        : {
            if ( _slider.isActive) {
                _slider.incrementValue(true)
            }
            else {
                setActiveValid()
            }
        }
        onDecrementValue        : {
            if ( _slider.isActive) {
                _slider.decrementValue(true)
            }
            else {
                setActiveValid()
            }
        }
    }
}
