/**
 * @license
 * Copyright (C) 2015 The Android Open Source Project
 *
 * 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.
 */

import {
  createStyle,
  safeStyleSheet,
  setInnerHtml,
} from '../../utils/inner-html-util';

function getStyleEl() {
  const customStyle = document.createElement('custom-style');
  customStyle.setAttribute('id', 'dark-theme');

  const styleSheet = safeStyleSheet`
    html {
      /**
       * Sections and variables must stay consistent with app-theme.js.
       *
       * Only modify color variables in this theme file. dark-theme extends
       * app-theme, so there is no need to repeat all variables, but for colors
       * it does make sense to list them all: If you override one color, then
       * you probably want to override all.
       */

      --error-foreground: var(--red-200);
      --error-background: var(--red-tonal);
      --error-background-hover: linear-gradient(var(--white-04), var(--white-04)), var(--red-tonal);
      --error-background-focus: linear-gradient(var(--white-12), var(--white-12)), var(--red-tonal);
      --error-ripple: var(--white-10);

      --warning-foreground: var(--orange-200);
      --warning-background: var(--orange-tonal);
      --warning-background-hover: linear-gradient(var(--white-04), var(--white-04)), var(--orange-tonal);
      --warning-background-focus: linear-gradient(var(--white-12), var(--white-12)), var(--orange-tonal);
      --warning-ripple: var(--white-10);

      --info-foreground: var(--blue-200);
      --info-background: var(--blue-tonal);
      --info-background-hover: linear-gradient(var(--white-04), var(--white-04)), var(--blue-tonal);
      --info-background-focus: linear-gradient(var(--white-12), var(--white-12)), var(--blue-tonal);
      --info-ripple: var(--white-10);

      --primary-button-text-color: black;
      --primary-button-background-color: var(--gerrit-blue-dark);
      --primary-button-background-hover: var(--blue-200-16);
      --primary-button-background-focus: var(--blue-200-24);

      --selected-foreground: var(--blue-200);
      --selected-background: var(--blue-900);

      --success-foreground: var(--green-200);
      --success-background: var(--green-tonal);
      --success-background-hover: linear-gradient(var(--white-04), var(--white-04)), var(--green-tonal);
      --success-background-focus: linear-gradient(var(--white-12), var(--white-12)), var(--green-tonal);
      --success-ripple: var(--white-10);

      --gray-foreground: var(--gray-300);
      --gray-background: var(--gray-tonal);
      --gray-background-hover: linear-gradient(var(--white-04), var(--white-04)), var(--gray-tonal);
      --gray-background-focus: linear-gradient(var(--white-12), var(--white-12)), var(--gray-tonal);
      --gray-ripple: var(--white-10);

      --disabled-foreground: var(--gray-200-38);
      --disabled-background: var(--gray-200-12);

      --chip-color: var(--gray-100);
      --error-color: var(--red-200);
      --tag-background: var(--cyan-900);
      --label-background: var(--red-900);

      /* text colors */
      --primary-text-color: var(--gray-200);
      --link-color: var(--gerrit-blue-dark);
      --comment-text-color: var(--primary-text-color);
      --deemphasized-text-color: var(--gray-500);
      --default-button-text-color: var(--gerrit-blue-dark);
      --chip-selected-text-color: var(--blue-100);
      --error-text-color: var(--red-200);
      /* Used on text color for change list doesn't need user's attention. */
      --reviewed-text-color: var(--gray-300);
      --vote-text-color: black;
      --status-text-color: black;
      --tooltip-text-color: var(--gray-900);
      --tooltip-button-text-color: var(--gerrit-blue-light);
      --negative-red-text-color: var(--red-200);
      --positive-green-text-color: var(--green-200);
      --indirect-ancestor-text-color: var(--green-200);

      /* background colors */
      /* primary background colors */
      --background-color-primary: var(--gray-900);
      --background-color-secondary: #2f3034;
      --background-color-tertiary: var(--gray-800);
      /* directly derived from primary background colors */
      /*   empty, because inheriting from app-theme is just fine
      /* unique background colors */
      --assignee-highlight-color: #3a361c;
      --assignee-highlight-selection-color: #423e24;
      --chip-selected-background-color: #3c4455;
      --edit-mode-background-color: #5c0a36;
      --emphasis-color: #383f4a;
      --hover-background-color: rgba(161, 194, 250, 0.2);
      --disabled-button-background-color: #484a4d;
      --selection-background-color: rgba(161, 194, 250, 0.1);
      --tooltip-background-color: var(--gray-200);

      /* comment background colors */
      --comment-background-color: #3c3f43;
      --robot-comment-background-color: #1e3a5f;
      --unresolved-comment-background-color: #614a19;

      /* vote background colors */
      --vote-color-approved: var(--green-300);
      --vote-color-disliked: var(--red-tonal);
      --vote-outline-disliked: var(--red-200);
      --vote-color-neutral: var(--gray-700);
      --vote-color-recommended: var(--green-tonal);
      --vote-outline-recommended: var(--green-200);
      --vote-color-rejected: var(--red-200);

      --outline-color-focus: var(--gray-100);

      /* misc colors */
      --border-color: var(--gray-700);
      --comment-separator-color: var(--border-color);

      /* checks tag colors */
      --tag-gray: var(--gray-tonal);
      --tag-yellow: var(--yellow-tonal);
      --tag-pink: var(--pink-tonal);
      --tag-purple: var(--purple-tonal);
      --tag-cyan: var(--cyan-tonal);
      --tag-brown: var(--brown-tonal);

      /* status colors */
      --status-merged: var(--green-400);
      --status-abandoned: var(--gray-300);
      --status-wip: #bcaaa4;
      --status-private: var(--purple-200);
      --status-conflict: var(--red-300);
      --status-revert-created: #ff8a65;
      --status-active: var(--blue-400);
      --status-ready: var(--pink-500);
      --status-custom: var(--purple-400);

      /* file status colors */
      --file-status-added: var(--green-tonal);
      --file-status-changed: var(--red-tonal);
      --file-status-unchanged: var(--grey-700);

      /* fonts */
      --font-weight-bold: 700; /* 700 is the same as 'bold' */

      /* spacing */

      /* header and footer */
      --footer-background-color: var(--background-color-tertiary);
      --footer-border-top: 1px solid var(--border-color);
      --header-background-color: var(--background-color-tertiary);
      --header-border-bottom: 1px solid var(--border-color);
      --header-padding: 0 var(--spacing-l);
      --header-text-color: var(--primary-text-color);

      /* dashboard size background colors */
      --dashboard-size-xs: var(--gray-700);
      --dashboard-size-s: var(--gray-500);
      --dashboard-size-m: var(--gray-400);
      --dashboard-size-l: var(--gray-300);
      --dashboard-size-xl: var(--gray-200);
      --dashboard-size-text: black;
      --dashboard-size-xs-text: white;
      --dashboard-size-xl-text: black;

      /* diff colors */
      --dark-add-highlight-color: var(--green-tonal);
      --dark-rebased-add-highlight-color: rgba(11, 255, 155, 0.15);
      --dark-rebased-remove-highlight-color: rgba(255, 139, 6, 0.15);
      --dark-remove-highlight-color: #62110f;
      --diff-blank-background-color: var(--background-color-secondary);
      --diff-context-control-background-color: #333311;
      --diff-context-control-border-color: var(--border-color);
      --diff-context-control-color: var(--deemphasized-text-color);
      --diff-highlight-range-color: rgba(0, 100, 200, 0.5);
      --diff-highlight-range-hover-color: rgba(0, 150, 255, 0.5);
      --diff-selection-background-color: #3a71d8;
      --diff-tab-indicator-color: var(--deemphasized-text-color);
      --diff-trailing-whitespace-indicator: #ff9ad2;
      --light-add-highlight-color: #182b1f;
      --light-rebased-add-highlight-color: #487165;
      --diff-moved-in-background: #1d4042;
      --diff-moved-out-background: #230e34;
      --diff-moved-in-label-color: var(--cyan-50);
      --diff-moved-out-label-color: var(--purple-50);
      --light-remove-add-highlight-color: #2f3f2f;
      --light-remove-highlight-color: #320404;
      --coverage-covered: #112826;
      --coverage-not-covered: #6b3600;
      --ranged-comment-hint-text-color: var(--blue-50);
      --token-highlighting-color: var(--yellow-tonal);

      /* syntax colors */
      --syntax-attr-color: #80cbbf;
      --syntax-attribute-color: var(--primary-text-color);
      --syntax-built_in-color: #f7c369;
      --syntax-comment-color: var(--deemphasized-text-color);
      --syntax-default-color: var(--primary-text-color);
      --syntax-doctag-weight: bold;
      --syntax-function-color: var(--primary-text-color);
      --syntax-keyword-color: #cd4cf0;
      --syntax-link-color: #c792ea;
      --syntax-literal-color: #eefff7;
      --syntax-meta-color: #6d7eee;
      --syntax-meta-keyword-color: #eefff7;
      --syntax-number-color: #00998a;
      --syntax-params-color: var(--primary-text-color);
      --syntax-regexp-color: #f77669;
      --syntax-selector-attr-color: #80cbbf;
      --syntax-selector-class-color: #ffcb68;
      --syntax-selector-id-color: #f77669;
      --syntax-selector-pseudo-color: #c792ea;
      --syntax-property-color: #c792ea;
      --syntax-string-color: #c3e88d;
      --syntax-tag-color: #f77669;
      --syntax-template-tag-color: #c792ea;
      --syntax-template-variable-color: #f77669;
      --syntax-title-color: #75a5ff;
      --syntax-type-color: #dd5f5f;
      --syntax-variable-color: #f77669;

      /* misc */
      --line-length-indicator-color: #d7aefb;

      /* paper and iron component overrides */
      --iron-overlay-backdrop-background-color: white;

      /* rules applied to html */
      background-color: var(--view-background-color);
    }
  `;

  setInnerHtml(customStyle, createStyle(styleSheet));
  return customStyle;
}

export function applyTheme() {
  document.head.appendChild(getStyleEl());
}
