// SCSS implementation of dark color mode
// see https://rsuitejs.com/design/dark

@use '../variables' as vars;
@use '../colors/dark' as dark;
@use '../colors/colors-base' as colors;
@use '../colors/palette' as p;
@use 'sass:color';

// Only include dark mode styles if enabled
@if (vars.$enable-dark-mode) {
  // Dark theme CSS custom properties
  [data-theme='dark'],
  .rs-theme-dark {
    // Gray levels
    --rs-gray-0: #{dark.$B000-dark};
    --rs-gray-50: #{dark.$B050-dark};
    --rs-gray-100: #{dark.$B100-dark};
    --rs-gray-200: #{dark.$B200-dark};
    --rs-gray-300: #{dark.$B300-dark};
    --rs-gray-400: #{dark.$B400-dark};
    --rs-gray-500: #{dark.$B500-dark};
    --rs-gray-600: #{dark.$B600-dark};
    --rs-gray-700: #{dark.$B700-dark};
    --rs-gray-800: #{dark.$B800-dark};
    --rs-gray-900: #{dark.$B900-dark};

    // Highlight levels
    --rs-primary-50: #{dark.$H050-dark};
    --rs-primary-100: #{dark.$H100-dark};
    --rs-primary-200: #{dark.$H200-dark};
    --rs-primary-300: #{dark.$H300-dark};
    --rs-primary-400: #{dark.$H400-dark};
    --rs-primary-500: #{dark.$H500-dark};
    --rs-primary-600: #{dark.$H600-dark};
    --rs-primary-700: #{dark.$H700-dark};
    --rs-primary-800: #{dark.$H800-dark};
    --rs-primary-900: #{dark.$H900-dark};

    // Spectrum
    --rs-color-red: #{colors.$red-dark};
    --rs-color-orange: #{colors.$orange-dark};
    --rs-color-yellow: #{colors.$yellow-dark};
    --rs-color-green: #{colors.$green-dark};
    --rs-color-cyan: #{colors.$cyan-dark};
    --rs-color-blue: #{colors.$blue-dark};
    --rs-color-violet: #{colors.$violet-dark};

    @include p.generate-palette-vars('red', colors.$red-dark);
    @include p.generate-palette-vars('orange', colors.$orange-dark);
    @include p.generate-palette-vars('yellow', colors.$yellow-dark);
    @include p.generate-palette-vars('green', colors.$green-dark);
    @include p.generate-palette-vars('cyan', colors.$cyan-dark);
    @include p.generate-palette-vars('blue', colors.$blue-dark);
    @include p.generate-palette-vars('violet', colors.$violet-dark);

    // Stateful colors
    --rs-state-success: var(--rs-color-green);
    --rs-state-info: var(--rs-color-blue);
    --rs-state-warning: var(--rs-color-yellow);
    --rs-state-error: var(--rs-color-red);

    // Reset
    --rs-body: var(--rs-gray-900);

    // Misc
    --rs-text-link: var(--rs-primary-500);
    --rs-text-link-hover: var(--rs-primary-400);
    --rs-text-link-active: var(--rs-primary-300);
    --rs-text-primary: var(--rs-gray-50);
    --rs-text-secondary: var(--rs-gray-200);
    --rs-text-tertiary: var(--rs-gray-300);
    --rs-text-heading: var(--rs-gray-0);
    --rs-text-inverse: var(--rs-gray-800);
    --rs-text-heading-inverse: var(--rs-gray-900);
    --rs-text-active: var(--rs-primary-500);
    --rs-text-disabled: var(--rs-gray-400);
    --rs-border-primary: var(--rs-gray-600);
    --rs-border-secondary: var(--rs-gray-700);
    --rs-bg-card: var(--rs-gray-800);
    --rs-bg-overlay: var(--rs-gray-700);
    --rs-bg-well: var(--rs-gray-900);
    --rs-bg-active: var(--rs-primary-700);
    --rs-bg-backdrop: rgb(from var(--rs-gray-900) r g b / 80%);
    --rs-state-hover-bg: var(--rs-gray-600);
    --rs-color-focus-ring: rgb(from var(--rs-gray-500) r g b / 80%);
    --rs-state-focus-shadow: 0 0 0 2px rgb(from var(--rs-gray-500) r g b / 25%);
    --rs-state-focus-outline: 2px solid rgb(from var(--rs-gray-500) r g b / 25%);
    --rs-state-error-outline: 2px solid rgb(from var(--rs-color-red) r g b / 25%);

    // Kbd
    --rs-kbd-bg: var(--rs-gray-600);
    --rs-kbd-text: var(--rs-gray-50);
    --rs-kbd-border: var(--rs-gray-700);

    // Scrollbar
    --rs-scrollbar-bg: transparent;
    --rs-scrollbar-thumb-bg: var(--rs-gray-300);
    --rs-scrollbar-thumb-hover-bg: var(--rs-gray-400);

    // Button
    --rs-btn-default-bg: var(--rs-gray-600);
    --rs-btn-default-text: var(--rs-gray-50);
    --rs-btn-default-border-color: var(--rs-gray-700);
    --rs-btn-default-hover-bg: var(--rs-gray-500);
    --rs-btn-default-active-bg: var(--rs-gray-300);
    --rs-btn-default-active-text: var(--rs-gray-0);
    --rs-btn-default-disabled-bg: var(--rs-gray-600);
    --rs-btn-default-disabled-text: var(--rs-gray-400);
    --rs-btn-primary-bg: var(--rs-primary-700);
    --rs-btn-primary-text: var(--rs-gray-0);
    --rs-btn-primary-border-color: var(--rs-primary-800);
    --rs-btn-primary-hover-bg: var(--rs-primary-600);
    --rs-btn-primary-active-bg: var(--rs-primary-400);
    --rs-btn-subtle-text: var(--rs-gray-200);
    --rs-btn-subtle-hover-bg: var(--rs-gray-500);
    --rs-btn-subtle-hover-text: var(--rs-gray-50);
    --rs-btn-subtle-active-bg: var(--rs-gray-400);
    --rs-btn-subtle-active-text: var(--rs-gray-0);
    --rs-btn-subtle-disabled-text: var(--rs-gray-500);
    --rs-btn-ghost-border: var(--rs-primary-500);
    --rs-btn-ghost-text: var(--rs-primary-500);
    --rs-btn-ghost-hover-border: var(--rs-primary-400);
    --rs-btn-ghost-hover-text: var(--rs-primary-400);
    --rs-btn-ghost-active-border: var(--rs-primary-200);
    --rs-btn-ghost-active-text: var(--rs-primary-200);
    --rs-btn-link-text: var(--rs-primary-500);
    --rs-btn-link-hover-text: var(--rs-primary-400);
    --rs-btn-link-active-text: var(--rs-primary-200);

    // Icon Button
    --rs-iconbtn-addon: var(--rs-gray-500);
    --rs-iconbtn-activated-addon: var(--rs-gray-400);
    --rs-iconbtn-pressed-addon: var(--rs-gray-200);
    --rs-iconbtn-primary-addon: var(--rs-primary-600);
    --rs-iconbtn-primary-activated-addon: var(--rs-primary-500);
    --rs-iconbtn-primary-pressed-addon: var(--rs-primary-400);

    // Divider
    --rs-divider-border: var(--rs-gray-600);

    // Loader
    --rs-loader-ring: rgb(from var(--rs-gray-50) r g b / 30%);
    --rs-loader-rotor: var(--rs-gray-0);
    --rs-loader-backdrop: rgb(from var(--rs-gray-900) r g b / 83%);
    --rs-loader-ring-inverse: rgb(from var(--rs-gray-50) r g b / 80%);
    --rs-loader-rotor-inverse: var(--rs-gray-500);
    --rs-loader-backdrop-inverse: rgb(from var(--rs-gray-0) r g b / 90%);

    // Message
    --rs-message-success-header: #fff;
    --rs-message-success-text: #fff;
    --rs-message-success-icon: #fff;
    --rs-message-success-bg: var(--rs-green-500);
    --rs-message-success-border: var(--rs-green-800);
    --rs-message-info-header: #fff;
    --rs-message-info-text: #fff;
    --rs-message-info-icon: #fff;
    --rs-message-info-bg: var(--rs-blue-500);
    --rs-message-info-border: var(--rs-blue-800);
    --rs-message-warning-header: var(--rs-gray-900);
    --rs-message-warning-text: var(--rs-gray-900);
    --rs-message-warning-icon: var(--rs-gray-900);
    --rs-message-warning-bg: var(--rs-yellow-500);
    --rs-message-warning-border: var(--rs-yellow-800);
    --rs-message-error-header: #fff;
    --rs-message-error-text: #fff;
    --rs-message-error-icon: #fff;
    --rs-message-error-bg: var(--rs-red-500);
    --rs-message-error-border: var(--rs-red-800);

    // Tooltip
    --rs-tooltip-bg: var(--rs-gray-500);
    --rs-tooltip-text: var(--rs-gray-0);

    // Progress
    --rs-progress-bg: var(--rs-gray-700);
    --rs-progress-bar: var(--rs-primary-500);
    --rs-progress-bar-success: var(--rs-color-green);
    --rs-progress-bar-fail: var(--rs-color-red);

    // Placeholder
    --rs-placeholder: var(--rs-gray-600);
    --rs-placeholder-active: var(--rs-gray-500);

    // Breadcrumb
    --rs-breadcrumb-item-active-text: #fff;

    // Dropdown
    --rs-dropdown-header-text: var(--rs-gray-500);

    // Menu
    --rs-menuitem-bg-active: rgb(from var(--rs-primary-900) r g b / 20%);
    --rs-menuitem-text-active: var(--rs-primary-500);
    --rs-menuitem-active-bg: var(--rs-gray-600);
    --rs-menuitem-active-text: currentColor;

    // Steps
    --rs-steps-border: var(--rs-gray-200);
    --rs-steps-state-finish: var(--rs-primary-500);
    --rs-steps-border-state-finish: var(--rs-primary-500);
    --rs-steps-state-wait: var(--rs-gray-200);
    --rs-steps-state-process: var(--rs-primary-700);
    --rs-steps-state-error: var(--rs-color-red);
    --rs-steps-border-state-error: var(--rs-color-red);
    --rs-steps-icon-state-process: var(--rs-primary-500);
    --rs-steps-icon-state-error: var(--rs-color-red);

    // Navs
    --rs-navs-text: var(--rs-gray-200);
    --rs-navs-text-hover: var(--rs-gray-100);
    --rs-navs-bg-hover: var(--rs-gray-400);
    --rs-navs-text-active: var(--rs-gray-0);
    --rs-navs-bg-active: var(--rs-gray-400);
    --rs-navs-tab-border: var(--rs-gray-600);
    --rs-navs-subtle-border: var(--rs-gray-600);
    --rs-navs-selected: var(--rs-primary-500);

    // Nav Pills
    --rs-navs-pills-bg: var(--rs-gray-700);
    --rs-navs-pills-item-color: var(--rs-text-secondary);
    --rs-navs-pills-item-active-bg: var(--rs-gray-600);
    --rs-navs-pills-item-active-color: var(--rs-gray-0);
    --rs-navs-pills-item-disabled-color: var(--rs-gray-400);

    // Navbar
    --rs-navbar-default-bg: var(--rs-gray-800);
    --rs-navbar-default-text: var(--rs-gray-200);
    --rs-navbar-default-selected-text: var(--rs-primary-500);
    --rs-navbar-default-hover-bg: var(--rs-gray-700);
    --rs-navbar-default-hover-text: var(--rs-gray-50);
    --rs-navbar-inverse-bg: var(--rs-primary-700);
    --rs-navbar-inverse-text: #fff;
    --rs-navbar-inverse-selected-bg: var(--rs-primary-400);
    --rs-navbar-inverse-hover-bg: var(--rs-primary-600);
    --rs-navbar-inverse-hover-text: #fff;
    --rs-navbar-subtle-bg: transparent;
    --rs-navbar-subtle-text: var(--rs-gray-200);
    --rs-navbar-subtle-selected-text: var(--rs-primary-500);
    --rs-navbar-subtle-hover-bg: var(--rs-gray-700);
    --rs-navbar-subtle-hover-text: var(--rs-gray-50);

    // Sidenav
    --rs-sidenav-default-bg: var(--rs-gray-800);
    --rs-sidenav-default-text: var(--rs-gray-200);
    --rs-sidenav-default-selected-text: var(--rs-primary-500);
    --rs-sidenav-default-selected-bg: var(--rs-gray-700);
    --rs-sidenav-default-hover-bg: var(--rs-gray-700);
    --rs-sidenav-default-hover-text: var(--rs-gray-50);
    --rs-sidenav-default-footer-border: var(--rs-gray-600);
    --rs-sidenav-default-subnav-border-color: var(--rs-gray-600);
    --rs-sidenav-inverse-bg: var(--rs-primary-700);
    --rs-sidenav-inverse-text: #fff;
    --rs-sidenav-inverse-selected-bg: var(--rs-primary-600);
    --rs-sidenav-inverse-hover-bg: var(--rs-primary-600);
    --rs-sidenav-inverse-footer-border: var(--rs-primary-600);
    --rs-sidenav-inverse-subnav-border-color: var(--rs-primary-500);
    --rs-sidenav-subtle-bg: transparent;
    --rs-sidenav-subtle-text: var(--rs-gray-200);
    --rs-sidenav-subtle-selected-text: var(--rs-primary-500);
    --rs-sidenav-subtle-selected-bg: var(--rs-gray-700);
    --rs-sidenav-subtle-hover-bg: var(--rs-gray-700);
    --rs-sidenav-subtle-hover-text: var(--rs-gray-50);
    --rs-sidenav-subtle-footer-border: var(--rs-gray-600);
    --rs-sidenav-subtle-subnav-border-color: var(--rs-gray-600);

    // Input
    --rs-input-bg: var(--rs-gray-800);
    --rs-input-focus-border: var(--rs-primary-500);
    --rs-input-disabled-bg: var(--rs-gray-700);

    // InlineEdit
    --rs-inline-edit-hover-bg: var(--rs-gray-500);

    // ARIA Listboxes
    --rs-listbox-option-group-bg: var(--rs-gray-700);
    --rs-listbox-option-hover-bg: var(--rs-gray-600);
    --rs-listbox-option-hover-text: currentColor;
    --rs-listbox-option-selected-text: var(--rs-primary-500);
    --rs-listbox-option-selected-bg: rgb(from var(--rs-primary-900) r g b / 20%);
    --rs-listbox-option-disabled-text: var(--rs-gray-500);
    --rs-listbox-option-disabled-selected-text: var(--rs-primary-200);

    // Checkbox
    --rs-checkbox-icon: var(--rs-gray-800);
    --rs-checkbox-border: var(--rs-gray-400);
    --rs-checkbox-checked-bg: var(--rs-primary-500);
    --rs-checkbox-disabled-bg: var(--rs-gray-500);

    // Radio
    --rs-radio-marker: var(--rs-gray-800);
    --rs-radio-border: var(--rs-gray-400);
    --rs-radio-checked-bg: var(--rs-primary-500);
    --rs-radio-disabled-bg: var(--rs-gray-500);

    // RadioTile
    --rs-radio-tile-border: var(--rs-gray-300);
    --rs-radio-tile-bg: var(--rs-gray-0);
    --rs-radio-tile-checked-color: var(--rs-primary-500);
    --rs-radio-tile-checked-mark-color: var(--rs-gray-800);
    --rs-radio-tile-checked-disabled-color: var(--rs-primary-900);

    // Rate
    --rs-rate-symbol: var(--rs-gray-600);
    --rs-rate-color: var(--rs-yellow-500);

    // SegmentedControl
    --rs-segmented-control-bg: var(--rs-gray-900);
    --rs-segmented-control-border-color: var(--rs-gray-900);
    --rs-segmented-control-item-active-color: var(--rs-text-primary);
    --rs-segmented-control-item-color: var(--rs-text-secondary);
    --rs-segmented-control-item-disabled-color: var(--rs-gray-500);
    --rs-segmented-control-pill-indicator-bg: var(--rs-gray-700);
    --rs-segmented-control-underline-color: var(--rs-primary-500);

    // Slider
    --rs-slider-bar: var(--rs-gray-600);
    --rs-slider-hover-bar: var(--rs-gray-600);
    --rs-slider-thumb-border: var(--rs-primary-500);
    --rs-slider-thumb-bg: var(--rs-gray-700);
    --rs-slider-thumb-hover-shadow: 0 0 0 8px rgb(from var(--rs-primary-500) r g b / 25%);
    --rs-slider-progress: var(--rs-primary-500);

    // Toggle
    --rs-toggle-bg: var(--rs-gray-500);
    --rs-toggle-thumb: #fff;
    --rs-toggle-hover-bg: var(--rs-gray-300);
    --rs-toggle-disabled-bg: var(--rs-gray-600);
    --rs-toggle-disabled-thumb: var(--rs-gray-500);
    --rs-toggle-checked-bg: var(--rs-primary-700);
    --rs-toggle-checked-thumb: #fff;
    --rs-toggle-checked-hover-bg: var(--rs-primary-600);
    --rs-toggle-checked-disabled-bg: var(--rs-primary-900);
    --rs-toggle-checked-disabled-thumb: var(--rs-gray-300);

    // Uploader
    --rs-uploader-item-bg: var(--rs-gray-300);
    --rs-uploader-item-hover-bg: var(--rs-gray-600);
    --rs-uploader-overlay-bg: rgb(from var(--rs-gray-600) r g b / 80%);
    --rs-uploader-dnd-bg: var(--rs-gray-700);
    --rs-uploader-dnd-border: var(--rs-gray-200);
    --rs-uploader-dnd-hover-border: var(--rs-primary-500);

    // Avatar
    --rs-avatar-bg: var(--rs-gray-400);
    --rs-avatar-text: var(--rs-gray-0);
    --rs-avatar-offset-color: var(--rs-gray-900);
    --rs-avatar-ring-color: var(--rs-avatar-bg);

    // Badge
    --rs-badge-bg: var(--rs-color-red);
    --rs-badge-text: var(--rs-gray-0);
    --rs-badge-border: var(--rs-gray-900);

    // Tag
    --rs-tag-bg: var(--rs-gray-600);

    // Card
    --rs-card-bg: var(--rs-gray-900);

    // Carousel
    --rs-carousel-bg: var(--rs-gray-600);
    --rs-carousel-indicator: rgb(from var(--rs-gray-0) r g b / 40%);
    --rs-carousel-indicator-hover: var(--rs-gray-0);
    --rs-carousel-indicator-active: var(--rs-primary-500);

    // List
    --rs-list-bg: var(--rs-gray-900);
    --rs-list-border: var(--rs-gray-700);
    --rs-list-hover-bg: var(--rs-gray-600);
    --rs-list-placeholder-bg: rgb(from var(--rs-primary-900) r g b / 20%);
    --rs-list-placeholder-border: var(--rs-primary-500);

    // Timeline
    --rs-timeline-indicator-bg: var(--rs-gray-500);
    --rs-timeline-indicator-active-bg: var(--rs-primary-500);

    // Table
    --rs-table-border-color: var(--rs-border-secondary);
    --rs-table-shadow: rgba(9, 9, 9, 0.99);
    --rs-table-sort: var(--rs-primary-500);
    --rs-table-resize: var(--rs-primary-500);
    --rs-table-scrollbar-track: var(--rs-gray-700);
    --rs-table-scrollbar-thumb: var(--rs-gray-200);
    --rs-table-scrollbar-thumb-active: var(--rs-gray-100);
    --rs-table-scrollbar-vertical-track: var(--rs-gray-700);

    // Form
    --rs-form-errormessage-text: #fff;
    --rs-form-errormessage-bg: var(--rs-color-red);
    --rs-form-errormessage-border: var(--rs-color-red);

    // Picker
    --rs-picker-value: var(--rs-primary-500);
    --rs-picker-count-bg: var(--rs-primary-700);
    --rs-picker-count-text: #fff;

    // Calendar
    --rs-calendar-today-bg: var(--rs-primary-700);
    --rs-calendar-today-text: #fff;
    --rs-calendar-range-bg: rgb(from var(--rs-primary-900) r g b / 50%);
    --rs-calendar-time-unit-bg: var(--rs-gray-600);
    --rs-calendar-date-selected-text: #fff;
    --rs-calendar-cell-selected-hover-bg: var(--rs-primary-700);

    // Popover
    --rs-popover-shadow: 0 4px 6px rgba(0, 0, 0, 0.3);

    // Tree
    --rs-tree-indent-line-color: rgba(255, 255, 255, 0.1);

    // ScrollView
    --rs-scroll-view-shadow-color: rgba(0, 0, 0, 0.99);

    // Stat
    --rs-stat-body-bg: var(--rs-gray-900);

    // CSS relative color syntax is not supported
    // https://developer.chrome.com/blog/css-relative-color-syntax/
    @supports not (color: rgb(from white r g b)) {
      // Misc
      --rs-bg-backdrop: #{p.fade(dark.$B900-dark, 80)};
      --rs-color-focus-ring: #{p.fade(dark.$B500-dark, 80)};
      --rs-state-focus-shadow: 0 0 0 2px #{p.fade(dark.$H500-dark, 25)};
      --rs-state-focus-outline: 2px solid #{p.fade(dark.$H500-dark, 25)};

      // Loader
      --rs-loader-ring: #{p.fade(dark.$B050-dark, 30)};
      --rs-loader-backdrop: #{p.fade(dark.$B900-dark, 83)};
      --rs-loader-ring-inverse: #{p.fade(dark.$B050-dark, 80)};
      --rs-loader-backdrop-inverse: #{p.fade(dark.$B000-dark, 90)};

      // Dropdown
      --rs-menuitem-bg-active: #{p.fade(dark.$H900-dark, 20)};

      // ARIA Listboxes
      --rs-listbox-option-selected-bg: #{p.fade(dark.$H900-dark, 20)};

      // Slider
      --rs-slider-thumb-hover-shadow: 0 0 0 8px #{p.fade(dark.$H500-dark, 25)};

      // Uploader
      --rs-uploader-overlay-bg: #{p.fade(dark.$B600-dark, 80)};

      // Carousel
      --rs-carousel-indicator: #{p.fade(dark.$B000-dark, 40)};

      // List
      --rs-list-placeholder-bg: #{p.fade(dark.$H900-dark, 20)};

      // Calendar
      --rs-calendar-range-bg: #{p.fade(dark.$H900-dark, 50)};

      // Placeholder
      --rs-placeholder-active: #{color.mix(white, dark.$B600-dark, 5%)};
    }
  }
}
