/****************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the Qt Quick Extras module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

import QtQuick 2.3
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2 as Base
import QtQuick.Controls.Styles.Flat 1.0
import QtQuick.Controls.Private 1.0
import QtQuick.Extras 1.4
import QtQuick.Extras.Private 1.0
import QtQuick.Extras.Private.CppUtils 1.0

Base.CalendarStyle {
    // This style doesn't support a grid.
    gridVisible: false
    // gridColor == frame color
    gridColor: control.enabled ? FlatStyle.mediumFrameColor : FlatStyle.alphaFrameColor
    // This ensures the week number separator is hidden.
    __gridLineWidth: 0

    // Used in conjunction with the control height.
    // These values are taken from the flat style specs.
    readonly property real __headerFontRatio: 18 / 264
    readonly property real __weekNumberFontRatio: 9 / 264
    readonly property real __dayFontRatio: 13 / 264

    navigationBar: Rectangle {
        implicitHeight: Math.round(control.height * 0.2121)
        color: control.enabled ? FlatStyle.styleColor : FlatStyle.mediumFrameColor

        MouseArea {
            id: previousMonth
            width: parent.height
            height: width
            anchors.verticalCenter: parent.verticalCenter
            anchors.left: parent.left
            onClicked: control.showPreviousMonth()

            Rectangle {
                anchors.fill: parent
                color: FlatStyle.selectedTextColor
                opacity: previousMonth.pressed ? 0.25 : 0

                Behavior on opacity {
                    NumberAnimation {
                        duration: 80
                    }
                }
            }

            LeftArrowIcon {
                width: Math.round(parent.width * 0.3)
                height: Math.round(parent.width * 0.3)
                anchors.centerIn: parent
            }
        }
        Label {
            id: dateText
            text: styleData.title
            color: FlatStyle.selectedTextColor
            elide: Text.ElideRight
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            font.pixelSize: control.height * __headerFontRatio
            font.family: FlatStyle.fontFamily
            font.weight: Font.Light
            renderType: FlatStyle.__renderType
            anchors.verticalCenter: parent.verticalCenter
            anchors.left: previousMonth.right
            anchors.leftMargin: 2
            anchors.right: nextMonth.left
            anchors.rightMargin: 2
        }
        MouseArea {
            id: nextMonth
            width: parent.height
            height: width
            anchors.verticalCenter: parent.verticalCenter
            anchors.right: parent.right
            onClicked: control.showNextMonth()

            Rectangle {
                anchors.fill: parent
                color: FlatStyle.selectedTextColor
                opacity: nextMonth.pressed ? 0.25 : 0

                Behavior on opacity {
                    NumberAnimation {
                        duration: 100
                    }
                }
            }

            LeftArrowIcon {
                width: Math.round(parent.width * 0.3)
                height: Math.round(parent.width * 0.3)
                anchors.centerIn: parent
                scale: -1
            }
        }
    }

    dayDelegate: Item {
        Rectangle {
            id: rect
            // There should always be at least 1 pixel margin between circles.
            width: MathUtils.roundEven(Math.min(parent.width, parent.height) - 1)
            height: width
            anchors.centerIn: parent
            radius: width / 2
            color: (styleData.date !== undefined && styleData.selected
                ? (control.enabled ? FlatStyle.styleColor : FlatStyle.disabledColor)
                : "transparent")
            border.width: styleData.today ? FlatStyle.onePixel : 0
            border.color: !control.enabled ? FlatStyle.alphaFrameColor : FlatStyle.styleColor
            opacity: control.enabled ? 1 : 0.15
        }

        Label {
            id: dayDelegateText
            text: styleData.date.getDate()
            anchors.fill: rect
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            fontSizeMode: Text.Fit
            font.pixelSize: control.height * __dayFontRatio
            font.family: FlatStyle.fontFamily
            font.weight: Font.Light
            renderType: FlatStyle.__renderType
            opacity: !control.enabled ? (!styleData.valid || !styleData.visibleMonth ? 0.3 : 0.6) :
                (!styleData.valid || !styleData.visibleMonth ? 0.3 : 1)
            color: !control.enabled ? FlatStyle.disabledColor
                : (styleData.selected ? FlatStyle.selectedTextColor : FlatStyle.textColor)
        }
    }

    weekNumberDelegate: Item {
        implicitWidth: control.width * 0.14

        Label {
            text: styleData.weekNumber
            anchors.centerIn: parent
            anchors.verticalCenterOffset: control.height * (__dayFontRatio - __weekNumberFontRatio) / 2
            fontSizeMode: Text.Fit
            font.pixelSize: control.height * __weekNumberFontRatio
            renderType: FlatStyle.__renderType
            color: !control.enabled ? FlatStyle.disabledColor : FlatStyle.styleColor
            opacity: !control.enabled ? FlatStyle.disabledOpacity : 1
        }
    }

    dayOfWeekDelegate: Item {
        implicitHeight: control.height * 0.13

        Label {
            text: localeDayName.length == 0 || localeDayName.length > 1
                ? control.locale.dayName(styleData.dayOfWeek, Locale.ShortFormat)[0]
                : localeDayName
            color: !control.enabled ? FlatStyle.disabledColor : FlatStyle.styleColor
            opacity: !control.enabled ? FlatStyle.disabledOpacity : 1
            font.family: FlatStyle.fontFamily
            anchors.fill: parent
            horizontalAlignment: Text.AlignHCenter
            verticalAlignment: Text.AlignVCenter
            fontSizeMode: Text.Fit
            font.pixelSize: control.height * __headerFontRatio
            renderType: FlatStyle.__renderType

            property string localeDayName: control.locale.dayName(styleData.dayOfWeek, Locale.NarrowFormat)
        }
    }
}
