// When color definition differs for dark and light variant,
// it gets @if ed depending on $variant

@import 'color-palette';

@function gtkalpha($c, $a) {
  @return unquote("alpha(#{$c}, #{$a})");
}

// Determine whether the color is "light" or "dark".
@function tone($color) {
  @if $color == "dark" or $color == "light" {
    @return $color;
  }

  // Calculate color brightness as per https://www.w3.org/TR/AERT/#color-contrast
  $brightness: (red($color) * 299 + green($color) * 587 + blue($color) * 114) / 1000;

  @if $brightness >= 128 {
    @return "light";
  } @else {
    @return "dark";
  }
}

// Determine whether to use dark or light color on top of given color to meet accessibility standards for contrast.
@function on($color, $type: text) {
  $contrast-tone: if(tone($color) == "dark", "light", "dark");

  @if not map-has-key(map-get($on-colors, $contrast-tone), $type) {
    @error "Invalid type: '#{$type}'";
  }

  @return map-get(map-get($on-colors, $contrast-tone), $type);
}

$on-colors: (
  dark: (
    primary: #1A73E8,
    error: #D93025,
    text: rgba(black, .87),
    text2: rgba(black, .6),
    text-disabled: rgba(black, .38),
    text2-disabled: rgba(black, .26),
    stroke: rgba(black, .26),
    stroke-disabled: rgba(black, .12),
    divider: rgba(black, .12),
    fill: rgba(black, .08),
    entry-fill: rgba(black, .04)
  ),
  light: (
    primary: #8AB4F8,
    error: #F28B82,
    text: white,
    text2: rgba(white, .7),
    text-disabled: rgba(white, .5),
    text2-disabled: rgba(white, .3),
    stroke: rgba(white, .3),
    stroke-disabled: rgba(white, .12),
    divider: rgba(white, .12),
    fill: rgba(white, .08),
    entry-fill: rgba(white, .04)
  )
);

// Determine the strength of highlight on top of given color.
@function highlight($color) {
  @if lightness($color) >= 80% {
    @return rgba(white, .4);
  } @else if lightness($color) >= 40% {
    @return rgba(white, .2);
  } @else {
    @return rgba(white, .1);
  }
}

// Private variables for dark background colors
$-dark-background:                       #1F1F1F;
$-dark-surface-1dp:                      mix(white, $-dark-background, 5%);
$-dark-surface-4dp:                      mix(white, $-dark-background, 9%);
$-dark-surface-8dp:                      mix(white, $-dark-background, 12%);
$-dark-surface-switch:                   mix(white, $-dark-background, 60%);

//
// Main colors
//

$primary:                               if($variant == 'light', on(light, primary), on(dark, primary));

$background:                            if($variant == 'light', #F2F2F2, $-dark-background);
$surface:                               if($variant == 'light', #FFFFFF, $-dark-surface-8dp);
$switch-surface:                        if($variant == 'light', #FFFFFF, $-dark-surface-switch); // Special case for switches

$base:                                  if($variant == 'light', #FFFFFF, $-dark-surface-1dp); // semi-surface with 1dp elevation
$base-alt:                              if($variant == 'light', #FAFAFA, $-dark-surface-1dp);

$error:                                 if($variant == 'light', on(light, error), on(dark, error));
$warning:                               if($variant == 'light', #F4B400, #FDD633);
$success:                               if($variant == 'light', #0F9D58, #81C995);
$visited:                               if($variant == 'light', $purple-500, $purple-200);

$os-background:                         $-dark-background;
$tooltip:                               rgba(#616161, .9);
$scrim:                                 rgba(black, .6);
$scrim-alt:                             rgba(black, .3);

$panel:                                 if($topbar == 'dark', #1F1F1F, $scrim);
$panel-solid:                           if($topbar == 'dark', #1F1F1F, #CCCCCC); // for Unity panel which doesn't allow translucent colors

$titlebar:                              if($topbar == 'dark', $-dark-surface-4dp, #E0E0E0);
$titlebar-backdrop:                     if($topbar == 'dark', $-dark-surface-1dp, #D6D6D6);
$titlebar-indicator:                    if($topbar == 'dark', currentColor, $primary);

//
// Overlay state colors
//

$overlay-hover-opacity:                 .08;
$overlay-focus-opacity:                 .08;
$overlay-focus-hover-opacity:           .16;
$overlay-active-opacity:                .12;
$overlay-checked-opacity:               .12;
$overlay-selected-opacity:              .24;

$overlay-hover:                         gtkalpha(currentColor, .08);
$overlay-focus:                         gtkalpha(currentColor, .08);
$overlay-focus-hover:                   gtkalpha(currentColor, .16);
$overlay-active:                        gtkalpha(currentColor, .12);
$overlay-checked:                       gtkalpha(currentColor, .12);
$overlay-selected:                      rgba($primary, .24);

//
// “On” colors
//

$base-fg:                               if($variant == 'light', black, white);

$text:                                  rgba($base-fg, .87);
$text2:                                 rgba($base-fg, .6);
$text-disabled:                         rgba($base-fg, .38);
$text2-disabled:                        rgba($base-fg, .26);
$stroke:                                rgba($base-fg, .26);
$stroke-disabled:                       rgba($base-fg, .12);
$divider:                               rgba($base-fg, .12);
$fill:                                  rgba($base-fg, .08);
$entry-fill:                            rgba($base-fg, .04);

$titlebar-base-fg:                      if($topbar == 'dark', white, black);

$titlebar-text:                         rgba($titlebar-base-fg, .87);
$titlebar-text2:                        rgba($titlebar-base-fg, .6);
$titlebar-text-disabled:                rgba($titlebar-base-fg, .38);
$titlebar-text2-disabled:               rgba($titlebar-base-fg, .26);
$titlebar-stroke:                       rgba($titlebar-base-fg, .26);
$titlebar-stroke-disabled:              rgba($titlebar-base-fg, .12);
$titlebar-divider:                      rgba($titlebar-base-fg, .12);
$titlebar-fill:                         rgba($titlebar-base-fg, .08);
$titlebar-entry-fill:                   rgba($titlebar-base-fg, .04);

// workaround for GTK3 @placeholder_text_color which doesn't allow translucent colors
$placeholder_text_color:                mix($base-fg, $base, percentage(.6));
