/**
 * Copyright (c) Nicolas Gallagher.
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 *
 * @flow
 */
import canUseDOM from '../../modules/canUseDom';
export type ColorSchemeName = 'light' | 'dark';
export type AppearancePreferences = {|
  colorScheme: ColorSchemeName
|};
type AppearanceListener = (preferences: AppearancePreferences) => void;
type DOMAppearanceListener = (ev: MediaQueryListEvent) => any;
declare function getQuery(): MediaQueryList | null;
const query = getQuery();
const listenerMapping = new WeakMap<AppearanceListener, DOMAppearanceListener>();
const Appearance = {
  getColorScheme(): ColorSchemeName {
    return query && query.matches ? 'dark' : 'light';
  },
  addChangeListener(listener: AppearanceListener): {
    remove: () => void
  } {
    let mappedListener = listenerMapping.get(listener);
    if (!mappedListener) {
      mappedListener = ({
        matches
      }: MediaQueryListEvent) => {
        listener({
          colorScheme: matches ? 'dark' : 'light'
        });
      };
      listenerMapping.set(listener, mappedListener);
    }
    if (query) {
      query.addListener(mappedListener);
    }
    declare function remove(): void;
    return {
      remove
    };
  }
};
export default Appearance;