/**
 * Copyright © 2016-2022 The Thingsboard Authors
 *
 * 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.
 */
@use '~@angular/material' as mat;
@import '~@mat-datetimepicker/core/datetimepicker/datetimepicker-theme.scss';
@import './scss/constants';

@include mat.core();

$tb-primary-color: #305680;
$tb-secondary-color: #527dad;
$tb-hue3-color: #a7c1de;

$tb-dark-primary-color: #9fa8da;

$tb-mat-indigo: (
  50: #e8eaf6,
  100: #c5cae9,
  200: #9fa8da,
  300: #7986cb,
  400: #5c6bc0,
  500: $tb-primary-color,
  600: $tb-secondary-color,
  700: #303f9f,
  800: #283593,
  900: #1a237e,
  A100: $tb-hue3-color,
  A200: #536dfe,
  A400: #3d5afe,
  A700: #304ffe,
  contrast: (
    50: rgba(black, 0.87),
    100: rgba(black, 0.87),
    200: rgba(black, 0.87),
    300: white,
    400: white,
    500: white,
    600: white,
    700: white,
    800: white,
    900: white,
    A100: rgba(black, 0.87),
    A200: white,
    A400: white,
    A700: white,
  )
);

$tb-primary: mat.define-palette($tb-mat-indigo);
$tb-accent: mat.define-palette(mat.$deep-orange-palette);

$background: (background: map_get(mat.$grey-palette, 200));

$tb-theme-background: map_merge(mat.$light-theme-background-palette, $background);

$tb-mat-theme: mat.define-light-theme(
    $tb-primary,
    $tb-accent
);

$tb-theme: map_merge($tb-mat-theme, (background: $tb-theme-background));

$primary: mat.get-color-from-palette($tb-primary);
$accent: mat.get-color-from-palette($tb-accent);

$tb-dark-mat-indigo: (
  50: #e8eaf6,
  100: #c5cae9,
  200: #9fa8da,
  300: #7986cb,
  400: #5c6bc0,
  500: $tb-dark-primary-color,
  600: $tb-secondary-color,
  700: #303f9f,
  800: $tb-primary-color,
  900: #1a237e,
  A100: $tb-hue3-color,
  A200: #536dfe,
  A400: #3d5afe,
  A700: #304ffe,
  contrast: (
    50: rgba(black, 0.87),
    100: rgba(black, 0.87),
    200: rgba(black, 0.87),
    300: rgba(black, 0.87),
    400: rgba(black, 0.87),
    500: map_get($tb-mat-indigo, 900),
    600: white,
    700: white,
    800: white,
    900: white,
    A100: rgba(black, 0.87),
    A200: rgba(black, 0.87),
    A400: rgba(black, 0.87),
    A700: rgba(black, 0.87),
  )
);

$tb-dark-primary: mat.define-palette($tb-dark-mat-indigo);

$tb-dark-theme-background: (
  status-bar: black,
  app-bar:    map_get($tb-dark-mat-indigo, 900),
  background: map_get($tb-dark-mat-indigo, 800),
  hover:      rgba(white, 0.04),
  card:       map_get($tb-dark-mat-indigo, 800),
  dialog:     map_get($tb-dark-mat-indigo, 800),
  disabled-button: rgba(white, 0.12),
  raised-button: map-get($tb-dark-mat-indigo, 50),
  focused-button: rgba(white, 0.12),
  selected-button: map_get($tb-dark-mat-indigo, 900),
  selected-disabled-button: map_get($tb-dark-mat-indigo, 800),
  disabled-button-toggle: black,
  unselected-chip: map_get($tb-dark-mat-indigo, 700),
  disabled-list-option: black,
  tooltip: map_get(mat.$grey-palette, 700),
);

@function get-tb-dark-theme($primary, $accent, $warn: mat.define-palette(mat.$red-palette)) {
  @return (
    primary: $primary,
    accent: $accent,
    warn: $warn,
    is-dark: true,
    foreground: mat.$dark-theme-foreground-palette,
    background: $tb-dark-theme-background,
  );
}

$tb-dark-theme: get-tb-dark-theme(
    $tb-dark-primary,
    $tb-accent
);

@mixin mat-fab-toolbar-theme($theme) {
  $primary: map-get($theme, primary);
  $accent: map-get($theme, accent);
  $warn: map-get($theme, warn);
  $background: map-get($theme, background);
  $foreground: map-get($theme, foreground);

  mat-fab-toolbar {
    .mat-fab-toolbar-background {
      background: mat.get-color-from-palette($background, app-bar);
      color: mat.get-color-from-palette($foreground, text);
    }
    &.mat-primary {
      .mat-fab-toolbar-background {
        background: mat.get-color-from-palette($primary);
        color: mat.get-color-from-palette($primary, default-contrast);
      }
    }
    &.mat-accent {
      .mat-fab-toolbar-background {
        background: mat.get-color-from-palette($accent);
        color: mat.get-color-from-palette($accent, default-contrast);
      }
    }
    &.mat-warn {
      .mat-fab-toolbar-background {
        background: mat.get-color-from-palette($warn);
        color: mat.get-color-from-palette($warn, default-contrast);
      }
    }
  }
}

@mixin _mat-toolbar-inverse-color($palette) {
  background: mat.get-color-from-palette($palette, default-contrast);
  color: rgba(black, 0.87);
}

@mixin mat-fab-toolbar-inverse-theme($theme) {
  $primary: map-get($theme, primary);
  $accent: map-get($theme, accent);
  $warn: map-get($theme, warn);
  $background: map-get($theme, foreground);
  $foreground: map-get($theme, background);

  mat-fab-toolbar {
    .mat-fab-toolbar-background {
      background: mat.get-color-from-palette($background, app-bar);
      color: mat.get-color-from-palette($foreground, text);
    }
    &.mat-primary {
      .mat-fab-toolbar-background {
        @include _mat-toolbar-inverse-color($primary);
      }
    }
    mat-toolbar {
      &.mat-primary {
        @include _mat-toolbar-inverse-color($primary);
        button.mat-icon-button {
          mat-icon {
            color: mat.get-color-from-palette($primary);
          }
        }
      }
    }
    .mat-fab {
      &.mat-primary {
        background: mat.get-color-from-palette($primary, default-contrast);
        color: mat.get-color-from-palette($primary);
      }
    }
  }

}

@mixin tb-components-theme($theme) {
  $primary: map-get($theme, primary);
  $warn: map-get($theme, warn);

  mat-toolbar{
    &.mat-hue-3 {
      background-color: mat.get-color-from-palette($primary, 'A100');
    }
  }

  @include mat-fab-toolbar-theme($tb-theme);

  div.tb-dashboard-page.mobile-app {
    @include mat-fab-toolbar-inverse-theme($tb-theme);
  }

  .same-color.mat-form-field-invalid {
    .mat-form-field-suffix {
      color: mat.get-color-from-palette($warn, text);
    }
  }
}

.tb-default {
  @include mat.all-component-themes($tb-theme);
  @include mat-datetimepicker-theme($tb-theme);
  @include tb-components-theme($tb-theme);
}

.tb-dark {
  @include mat.all-component-themes($tb-dark-theme);
}

