// Copyright (C) 2026 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.

/**
 * Chart theme utilities for reading Perfetto theme colors.
 *
 * DESIGN NOTES:
 *
 * 1. Colors are read from CSS variables defined in theme_provider.scss, NOT
 *    hardcoded. This ensures charts automatically adapt when theme colors
 *    are updated in SCSS.
 *
 * 2. Colors are read from the provided element (or a sensible fallback) so
 *    that charts work even in embedded builds that omit .pf-theme-provider.
 *
 * 3. All color-sensitive values (axis, series, tooltip) are included directly
 *    in the ECharts option object. When Mithril redraws after a theme change,
 *    the option is rebuilt with the latest CSS variable values, which causes
 *    ECharts to update colors via setOption().
 */

/**
 * Theme colors for charts and visualizations.
 */
export interface ChartThemeColors {
  readonly textColor: string;
  readonly borderColor: string;
  readonly backgroundColor: string;
  readonly accentColor: string;
  readonly chartColors: readonly string[];
  readonly fontFamily: string;
}

/**
 * Returns the current theme colors by reading CSS variables from the given
 * element. The element must be within the DOM tree that has the theme CSS
 * variables defined (typically a child of .pf-theme-provider).
 */
export function getChartThemeColors(el: Element): ChartThemeColors {
  const style = getComputedStyle(el);

  const chartColors: string[] = [];
  for (let i = 1; i <= 8; i++) {
    chartColors.push(style.getPropertyValue(`--pf-chart-color-${i}`).trim());
  }

  return {
    textColor: style.getPropertyValue('--pf-color-text').trim(),
    borderColor: style.getPropertyValue('--pf-color-border').trim(),
    backgroundColor: style.getPropertyValue('--pf-color-background').trim(),
    accentColor: style.getPropertyValue('--pf-color-accent').trim(),
    chartColors,
    fontFamily:
      style.getPropertyValue('--pf-font-compact').trim() || 'sans-serif',
  };
}
