/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.
 */

@use 'sass:map';
@use '@angular/material' as mat;

@mixin generate-theme($material-theme, $nifi-theme) {
    // Get the color config from the theme.
    $material-theme-color-config: mat.get-color-config($material-theme);
    $nifi-theme-color-config: mat.get-color-config($nifi-theme);

    // Get the color palette from the color-config.
    $material-theme-primary-palette: map.get($material-theme-color-config, 'primary');
    $nifi-theme-surface-palette: map.get($nifi-theme-color-config, 'primary');
    $material-theme-accent-palette: map.get($material-theme-color-config, 'accent');

    // Get hues from palette
    $is-dark: map-get($nifi-theme-color-config, is-dark);
    $material-theme-primary-palette-darker: mat.get-color-from-palette($material-theme-primary-palette, darker);
    $material-theme-primary-palette-lighter: mat.get-color-from-palette($material-theme-primary-palette, lighter);
    $material-theme-primary-palette-default: mat.get-color-from-palette($material-theme-primary-palette, default);

    $nifi-theme-surface-palette-default: mat.get-color-from-palette($nifi-theme-surface-palette, default);
    $nifi-theme-surface-palette-lighter: mat.get-color-from-palette($nifi-theme-surface-palette, lighter);
    $nifi-theme-surface-palette-darker: mat.get-color-from-palette($nifi-theme-surface-palette, darker);
    $nifi-theme-surface-palette-darker-contrast: mat.get-color-from-palette(
        $nifi-theme-surface-palette,
        darker-contrast
    );
    $nifi-theme-surface-palette-lighter-contrast: mat.get-color-from-palette(
        $nifi-theme-surface-palette,
        lighter-contrast
    );
    $surface-contrast: if(
        $is-dark,
        $nifi-theme-surface-palette-darker-contrast,
        $nifi-theme-surface-palette-lighter-contrast
    );

    $alternate-surface: if(
        $is-dark,
        rgba($nifi-theme-surface-palette-darker-contrast, 0.28),
        rgba($nifi-theme-surface-palette-lighter-contrast, 0.2)
    );

    .property-editor {
        @include mat.button-density(-1);

        .nf-editor {
            border-color: var(--mdc-outlined-text-field-label-text-color);

            &.blank {
                border-color: var(--mdc-outlined-text-field-disabled-label-text-color);
            }

            .CodeMirror {
                background-color: if($is-dark, $nifi-theme-surface-palette-darker, $nifi-theme-surface-palette-lighter);
            }

            .CodeMirror-code {
                @extend .surface-contrast;
            }

            .CodeMirror-selected {
                background: var(--mat-menu-item-hover-state-layer-color);
            }

            .CodeMirror-gutters {
                background: if(
                    $is-dark,
                    rgba($nifi-theme-surface-palette-default, 0.4),
                    rgba($nifi-theme-surface-palette-default, 0.08)
                );
            }

            .CodeMirror-linenumber {
                color: rgba($surface-contrast, 0.4);
            }

            /*
                Override some defaults...
            */

            .cm-s-default .CodeMirror-matchingbracket {
                color: $alternate-surface !important;
                background-color: if($is-dark, $nifi-theme-surface-palette-darker, $nifi-theme-surface-palette-lighter);
            }
        }
    }
}
