/*****************************************************************************
 * Open MCT, Copyright (c) 2014-2018, United States Government
 * as represented by the Administrator of the National Aeronautics and Space
 * Administration. All rights reserved.
 *
 * Open MCT is licensed under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * http://www.apache.org/licenses/LICENSE-2.0.
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations
 * under the License.
 *
 * Open MCT includes source code licensed under additional open source
 * licenses. See the Open Source Licenses file (LICENSES.md) included with
 * this source code distribution or the Licensing information page available
 * at runtime from the About dialog for additional information.
 *****************************************************************************/
/********************************************************************* PLOTS */
mct-plot {
    display: contents;
}

/*********************** STACKED PLOT LAYOUT */
.t-plot-stacked {
    .l-view-section {
        //  Make this a flex container
        display: flex;
        flex-flow: column nowrap;
        .gl-plot.child-frame {
            mct-plot {
                display: flex;
                flex: 1 1 auto;
                height: 100%;
                position: relative;
            }
            flex: 1 1 auto;
            &:not(:first-child) {
                margin-top: $interiorMargin;
            }
        }
    }

    .s-status-timeconductor-unsynced .holder-plot {
        .t-object-alert.t-alert-unsynced {
            display: block;
        }
    }
}

.is-editing {
    .gl-plot.child-frame {
        &:hover {
            background: rgba($editUIColorBg, 0.1);
            box-shadow: inset rgba($editUIColorBg, 0.8) 0 0 0 1px;
        }

        &[s-selected] {
            border: 1px solid $editUIColorFg !important;
            color: $editUIColorFg !important;
            box-shadow: $editFrameSelectedShdw;
            z-index: 2;
        }
    }
}

.gl-plot {
    color: $colorPlotFg;
    display: flex;
    //font-size: 0.7rem;
    position: relative;
    width: 100%;
    height: 100%;
    min-height: $plotMinH;

    /*********************** AXIS AND DISPLAY AREA */
    .plot-wrapper-axis-and-display-area {
        position: relative;
        flex: 1 1 auto;

        .l-state-indicators {
            color: $colorPausedBg;
            position: absolute;
            display: block;
            font-size: 1.5em;
            pointer-events: none;
            top: $interiorMarginSm;
            left: $interiorMarginSm;
            z-index: 2;

            > * + * {
                margin-left: $interiorMarginSm;
            }

            .t-alert-unsynced {
                display: none;
            }
        }
    }

    .gl-plot-wrapper-display-area-and-x-axis {
        // Holds the plot area and the X-axis only
        position: absolute;
        top: nth($plotDisplayArea, 1);
        right:0;
        bottom: 0;
        left: nth($plotDisplayArea, 4);

        .gl-plot-display-area {
            position: absolute;
            top: 0;
            right: 0;
            bottom: nth($plotDisplayArea, 3);
            left: 0;
        }

        .gl-plot-axis-area.gl-plot-x {
            top: auto;
            right: 0;
            bottom: 0;
            left: 0;
            height: $plotXBarH;
            width: auto;
            overflow: hidden;
        }
    }

    .gl-plot-axis-area {
        position: absolute;
        &.gl-plot-y {
            top: nth($plotDisplayArea, 1);
            right: auto;
            bottom: nth($plotDisplayArea, 3);
            left: 0;
            width: $plotYBarW;

            &:hover {
                .gl-plot-y-label__select {
                    display: block;
                }
            }
        }
    }

    .gl-plot-coords {
        box-sizing: border-box;
        border-radius: $controlCr;
        background: black;
        color: lighten($colorBodyFg, 30%);
        padding: 2px 5px;
        position: absolute;
        top: nth($plotDisplayArea,1) + $interiorMarginLg;
        right: auto;
        bottom: auto;
        left: nth($plotDisplayArea,4) + $interiorMarginLg;
        z-index: 10;
        &:empty {
            display: none;
        }
    }

    .gl-plot-label,
    .l-plot-label {
        color: $colorPlotLabelFg;
        position: absolute;
        text-align: center;

        &.gl-plot-x-label,
        &.l-plot-x-label {
            top: auto;
            right: 0;
            bottom: 0;
            left: 0;
            height: auto;
        }

        &.gl-plot-y-label {
            display: block;
            left: 0; top: 0; right: auto; bottom: 0;
            padding-left: 5px;
            text-orientation: mixed;
            overflow: hidden;
            writing-mode: vertical-lr;
            &:before {
                // Icon denoting configurability
                margin-bottom: $interiorMargin; // Uses margin-bottom due to writing-mode
            }
        }
    }

    .gl-plot-y-label__select {
        position: absolute;
        top: 50%;
        transform: translateY(-50%);
        left: 20px;
        z-index: 10;
    }

    .gl-plot-x-options,
    .gl-plot-y-options {
        $h: 24px;
        position: absolute;
        height: $h;
        min-height: $h;
        z-index: 2;
    }

    .gl-plot-x-options {
        transform: translateX(-50%);
        bottom: 0;
        left: 50%;
    }

    .gl-plot-y-options {
        transform: translateY(-50%);
        min-width: 150px; // Need this due to enclosure of .select
        top: 50%;
        left: $plotYLabelW + $interiorMargin * 2;
    }

    .t-plot-display-controls {
        position: absolute;
        top: $interiorMargin;
        right: $interiorMargin;
    }

    .gl-plot-hash {
        position: absolute;
        opacity: $opacityPlotHash;
        &.hash-v {
            border-right: 1px $colorPlotHash $stylePlotHash;
            height: 100%;
        }
        &.hash-h {
            border-bottom: 1px $colorPlotHash $stylePlotHash;
            width: 100%;
        }
    }

    &__local-controls {
        // Plot local controls
        $m: $interiorMargin;
        display: flex;
        align-items: center;
        position: absolute;
        top: $m;
        right: $m;
        z-index: 9;

        &__reset {
            transition: right 100ms;
            top: $m;
            right: $m;
        }

        &__zoom-and-guides {
            top: $m;
            right: $m;
        }
    }
}

.gl-plot-display-area,
.plot-display-area {
    @if $colorPlotBg != none {
        background-color: $colorPlotBg;
    }
    cursor: crosshair;
    border: 1px solid $colorPlotAreaBorder;
}

.tick {
    position: absolute;
    border: 0 $colorPlotHash solid;
    &.tick-x {
        border-right-width: 1px;
        height: 100%; // Assumption is that the tick will be in a holder that will set it's height;
    }
}

.gl-plot-tick,
.tick-label {
    @include reverseEllipsis();
    font-size: 0.7rem;
    position: absolute;
    &.gl-plot-x-tick-label,
    &.tick-label-x {
        right: auto;
        bottom: auto;
        left: auto;
        height: auto;
        width: 20%;
        margin-left: -10%;
        text-align: center;
    }
    &.gl-plot-y-tick-label,
    &.tick-label-y {
        top: auto;
        height: 1em;
        width: auto;
        margin-bottom: -0.5em;
        text-align: right;
    }
}

.gl-plot-tick {
    &.gl-plot-x-tick-label {
        top: $interiorMargin;
    }
    &.gl-plot-y-tick-label {
        right: $interiorMargin;
        left: $interiorMargin;
    }
}

.tick-label {
    &.tick-label-x {
        top: 0;
    }
    &.tick-label-y {
        right: 0;
        left: 0;
    }
}

.export-plot {
    $bg: white;
    $fg: black;
    $gry: #999;

    background: $bg !important;
    z-index: -10;

    .l-view-section {
        $m: $interiorMargin;
        top: $m !important;
        right: $m;
        bottom: $m;
        left: $m;

        .s-status-timeconductor-unsynced .holder-plot {
            .t-object-alert.t-alert-unsynced {
                display: none;
            }
        }
    }

    .gl-plot-display-area {
        background: none !important;
        border-color: $gry !important;

        .gl-plot-local-controls,
        .h-local-controls {
            opacity: 0;
        }
    }

    .gl-plot {
        color: $fg;

        .gl-plot-hash {
            opacity: 0.1;
            border-color: $fg;
        }
    }

    table {
        thead {
            border-bottom: none;

            th {
                background: #eee;
                border-left-color: $bg;
                color: #666;
            }

            tr {
                border: none;
            }
        }
        tbody {
            tr {
                border-top: 1px solid #ccc;
            }

            td {
                color: $fg;
            }
        }
    }
}

/****************** _LEGEND.SCSS */
.gl-plot-legend,
.c-plot-legend {
    &__wrapper {
        // Holds view-control and both collapsed and expanded legends
        flex: 1 1 auto;
    }

    &__view-control {
        padding-top: 2px;
        margin-right: $interiorMarginSm;
    }

    &__header {
        @include propertiesHeader();
        margin-bottom: $interiorMarginSm;
    }
}

.gl-plot-legend {
    display: flex;
    align-items: flex-start;

    table {
        table-layout: fixed;
        th,
        td {
            @include ellipsize(); // Note: this won't work if table-layout uses anything other than fixed.
            padding: 1px 3px; // Tighter than standard tabular padding
        }
    }
}

*[class*="-legend"] {
    &.hover-on-plot {
        // User is hovering over the plot to get a value at a point
        .hover-value-enabled {
            background-color: $legendHoverValueBg;
            border-radius: $smallCr;
            padding: 0 $interiorMarginSm;

            &.value-to-display-min:before {
                content: 'MIN ';
            }
            &.value-to-display-max:before {
                content: 'MAX ';
            }
        }
    }
}

/***************** GENERAL STYLES, ALL STATES */
.plot-legend-item {
    // General styles for legend items, both expanded and collapsed legend states
    .plot-series-color-swatch {
        border-radius: $smallCr;
        border: 1px solid $colorBodyBg;
        display: inline-block;
        height: $plotSwatchD;
        width: $plotSwatchD;
    }
    .plot-series-name {
        display: inline;
    }

    .plot-series-value {
        @include ellipsize();
    }
}

.plot-wrapper-expanded-legend {
    flex: 1 1 auto;
}

.gl-plot {
    &.plot-legend-collapsed .plot-wrapper-expanded-legend { display: none; }
    &.plot-legend-expanded .plot-wrapper-collapsed-legend { display: none; }

    &.plot-legend-collapsed .icon-cursor-lock::before { padding-right: 5px; }
    &.plot-legend-expanded .icon-cursor-lock::before { padding-right: 5px; }

    &.plot-legend-top .gl-plot-legend { margin-bottom: $interiorMargin; }
    &.plot-legend-bottom .gl-plot-legend { margin-top: $interiorMargin; }
    &.plot-legend-right .gl-plot-legend { margin-left: $interiorMargin; }
    &.plot-legend-left .gl-plot-legend { margin-right: $interiorMargin; }

    /***************** GENERAL STYLES, COLLAPSED */
    &.plot-legend-collapsed {
        // .plot-legend-item is a span of spans.

        .plot-legend-item {
            display: flex;
            align-items: center;
            justify-content: stretch;
            &:not(:first-child) {
                margin-left: $interiorMarginLg;
            }
            .plot-series-swatch-and-name,
            .plot-series-value {
                @include ellipsize();
                flex: 1 1 auto;
            }

            .plot-series-swatch-and-name {
                margin-right: $interiorMarginSm;
            }

            .plot-series-value {
                text-align: left;
            }
        }
    }

    /***************** GENERAL STYLES, EXPANDED */
    &.plot-legend-expanded {
        .gl-plot-legend {
            // max-height: 70%;
        }

        .plot-wrapper-expanded-legend {
            overflow-y: auto;
            table thead th { background: $legendTableHeadBg; }
        }
    }

    /***************** TOP OR BOTTOM */
    &.plot-legend-top,
    &.plot-legend-bottom {
        // General styles when legend is on the top or bottom
        flex-direction: column;

        &.plot-legend-collapsed {
            // COLLAPSED ON TOP OR BOTTOM
            .plot-wrapper-collapsed-legend {
                display: flex;
                flex: 1 1 auto;
                overflow: hidden;
            }
        }
    }

    /***************** LEFT OR RIGHT */
    &.plot-legend-left,
    &.plot-legend-right {
        // General styles when legend is on left or right
        .gl-plot-legend {
            max-height: inherit;
        }

        &.plot-legend-expanded {
            // EXPANDED, ON EITHER SIDE
            .gl-plot-legend {
                width: $plotLegendWidthExpanded;
            }
        }

        &.plot-legend-collapsed {
            // COLLAPSED, ON EITHER SIDE
            .gl-plot-legend {
                width: $plotLegendWidthCollapsed;
            }

            .plot-wrapper-collapsed-legend {
                display: flex;
                flex-flow: column nowrap;
                min-width: 0;
                flex: 1 1 auto;
                overflow-y: auto;
            }
            .plot-legend-item {
                margin-bottom: 1px;
                margin-left: 0;
                flex-wrap: wrap;
                .plot-series-swatch-and-name {
                    flex: 0 1 auto;
                    min-width: 20%;
                }
                .plot-series-value {
                    flex: 0 1 auto;
                    width: auto;
                }
            }
        }
    }

    /***************** ON BOTTOM OR RIGHT */
    &.plot-legend-right,
    &.plot-legend-bottom {
        .gl-plot-legend {
            order: 2;
        }
        .plot-wrapper-axis-and-display-area {
            order: 1;
        }
    }
}

/***************** CURSOR GUIDES */
[class*='c-cursor-guide'] {
    box-shadow: $shdwCursorGuide;
    background-color: $colorCursorGuide;
    display: none; // Displayed when an element with has-cursor-guides gets a hover; see below
    pointer-events: none;
    position: absolute;
}

.has-cursor-guides:hover [class*='c-cursor-guide'] {
    display: block;
}

.c-cursor-guide {
    &--h {
        height: 1px;
        left: 0; right: 0;
    }

    &--v {
        width: 1px;
        top: 0; bottom: 0;
    }
}

.s-status-timeconductor-unsynced {
    .t-alert-unsynced {
        display: inline-block !important;
    }
}
