//
//  CheckBox.qml
//
//  Created by David Rowe on 26 Feb 2016
//  Copyright 2016 High Fidelity, Inc.
//
//  Distributed under the Apache License, Version 2.0.
//  See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
//

import QtQuick 2.5
import QtQuick.Controls 1.4 as Original
import QtQuick.Controls.Styles 1.4

import "../styles-uit"

import TabletScriptingInterface 1.0

Original.CheckBox {
    id: checkBox

    property int colorScheme: hifi.colorSchemes.light
    property string color: hifi.colors.lightGrayText
    readonly property bool isLightColorScheme: colorScheme == hifi.colorSchemes.light
    property bool isRedCheck: false
    property int boxSize: 14
    property int boxRadius: 3
    property bool wrap: true;
    readonly property int checkSize: Math.max(boxSize - 8, 10)
    readonly property int checkRadius: 2
    activeFocusOnPress: true

    onClicked: {
        tabletInterface.playSound(TabletEnums.ButtonClick);
    }

// TODO: doesnt works for QQC1. check with QQC2
//    onHovered: {
//        tabletInterface.playSound(TabletEnums.ButtonHover);
//    }

    style: CheckBoxStyle {
        indicator: Rectangle {
            id: box
            width: boxSize
            height: boxSize
            radius: boxRadius
            border.width: 1
            border.color: pressed || hovered
                          ? hifi.colors.checkboxCheckedBorder
                          : (checkBox.isLightColorScheme ? hifi.colors.checkboxLightFinish : hifi.colors.checkboxDarkFinish)

            gradient: Gradient {
                GradientStop {
                    position: 0.2
                    color: pressed || hovered
                           ? (checkBox.isLightColorScheme ? hifi.colors.checkboxChecked : hifi.colors.checkboxLightStart)
                           : (checkBox.isLightColorScheme ? hifi.colors.checkboxLightStart : hifi.colors.checkboxDarkStart)
                }
                GradientStop {
                    position: 1.0
                    color: pressed || hovered
                           ? (checkBox.isLightColorScheme ? hifi.colors.checkboxChecked : hifi.colors.checkboxLightFinish)
                           : (checkBox.isLightColorScheme ? hifi.colors.checkboxLightFinish : hifi.colors.checkboxDarkFinish)
                }
            }

            Rectangle {
                visible: pressed || hovered
                anchors.centerIn: parent
                id: innerBox
                width: checkSize - 4
                height: width
                radius: checkRadius
                color: hifi.colors.checkboxCheckedBorder
            }

            Rectangle {
                id: check
                width: checkSize
                height: checkSize
                radius: checkRadius
                anchors.centerIn: parent
                color: isRedCheck ? hifi.colors.checkboxCheckedRed : hifi.colors.checkboxChecked
                border.width: 2
                border.color: isRedCheck? hifi.colors.checkboxCheckedBorderRed : hifi.colors.checkboxCheckedBorder
                visible: checked && !pressed || !checked && pressed
            }

            Rectangle {
                id: disabledOverlay
                visible: !enabled
                width: boxSize
                height: boxSize
                radius: boxRadius
                border.width: 1
                border.color: hifi.colors.baseGrayHighlight
                color: hifi.colors.baseGrayHighlight
                opacity: 0.5
            }
        }

        label: Label {
            text: control.text
            color: control.color
            x: 2
            wrapMode: checkBox.wrap ? Text.Wrap : Text.NoWrap
            elide: checkBox.wrap ? Text.ElideNone : Text.ElideRight
            enabled: checkBox.enabled
        }
    }
}