/*!
 *
 * Copyright (c) 2021-2024 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    PreTreatmentUltrafiltration.qml
 * \author  (last)      Behrouz NematiPour
 * \date    (last)      08-Mar-2024
 * \author  (original)  Behrouz NematiPour
 * \date    (original)  18-Mar-2021
 *
 */

// Qt
import QtQuick 2.12

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

/*!
 * \brief   Pre-Treatment ultrafiltration screen
 * \details which contains a slider to let user set the ultratiltration volume.
 */
PreTreatmentBase { id: _root
    objectName: "_PreTreatmentUltrafiltration"

    property alias  ufVolume    : _volumeSlider.value

    header.confirmEnabled: _volumeSlider.isActive

    function reset( vValue ) {
        if ( ! handleMinimum( vValue ) ) // if not handled go next
        if ( ! handleMaximum( vValue ) ) // if not handled go next
        _volumeSlider.reset ( vValue )
    }

    function handleMinimum( vValue ) {
        if( _volumeSlider.minimum > vValue ){
            _volumeSlider.reset  ( _volumeSlider.minimum )
            return true // handled
        }
        return false // not handled so check max
    }

    function handleMaximum( vValue ) {
        if( _volumeSlider.maximum < vValue ){
            _volumeSlider.reset  ( _volumeSlider.maximum )
            return true // handled
        }
        return false    // not handled so check min (if max checked first)
    }

    Text { id: _textLabel
        visible : true
        color   : Colors.textMain
        text    : qsTr("Ultrafiltration Volume") + " " + Variables.unitTextUltrafiltrationVolume
        font {
            pixelSize  : Fonts.fontPixelCreateTreatment
        }
        anchors {
            left            : _volumeSlider.left
            bottom          : _volumeSlider.top
            bottomMargin    : 45
        }
    }

    Text { id: _textValue
        visible : true
        color   : Colors.textMain
        text    : _root.ufVolume.toFixed(Variables.ultrafiltrationPrecision)
        font {
            pixelSize  : Fonts.fontPixelCreateTreatment
        }
        anchors {
            right           : _volumeSlider.right
            bottom          : _volumeSlider.top
            bottomMargin    : 45
        }
    }

    Slider { id: _volumeSlider
        objectName: "_volumeSlider"
        anchors {
            horizontalCenter: parent.horizontalCenter
            top: parent.top
            topMargin: 425
        }
        isActive: false
        width   : Variables.ultrafiltrationProgressbarWidth
        step    : 0.100
        stepSnap: true
        ticks   : true
        diameter: Variables.sliderCircleDiameter
        decimal : Variables.ultrafiltrationPrecision
        // it can get the minimum from the message
        // but some time it has been decided that UI shall always be set to minimum zero.
        minimum : Variables.ultrafiltrationMinDef // vTreatmentRanges.treatmentRanges_Ultrafiltration_Volume_Min
        maximum : vTreatmentRanges.treatmentRanges_Ultrafiltration_Volume_Max
        minText.font.pixelSize: Fonts.fontPixelFluidText
        maxText.font.pixelSize: Fonts.fontPixelFluidText
        onPressed: isActive = true

        onMinimumChanged: {
            let mValue = vPreTreatmentAdjustmentUltrafiltrationInit.volume
            if ( ! _root.handleMinimum  ( mValue ) ) // if not handled go next
                _volumeSlider.reset     ( mValue )
        }
        onMaximumChanged: {
            let mValue = vPreTreatmentAdjustmentUltrafiltrationInit.volume
            if ( ! _root.handleMaximum  ( mValue ) )  // if not handled go next
                _volumeSlider.reset     ( mValue )
        }
    }

    SliderArrows{ id:_sliderArrows
        anchors.verticalCenter  : _volumeSlider.verticalCenter
        anchors.left            : _volumeSlider.right
        anchors.leftMargin      : Variables.sliderAdjustButtonLeftMargin

        onIncrementValue        : {
            _volumeSlider.incrementValue(true)
            _volumeSlider.isActive = true
        }
        onDecrementValue        : {
            _volumeSlider.decrementValue(true)
            _volumeSlider.isActive = true
        }
    }

}
