import { requireEl } from '../core/app-dom.js';

const STORAGE_KEY = 'app-contrast';

const setContrast = (contrast) => {
  const root = document.documentElement;
  root.dataset.contrast = contrast === 'high' ? 'high' : 'normal';
};

const setIcon = (button, contrast) => {
  const icon = button.querySelector('i');
  if (!icon) {return;}
  icon.classList.remove('bi-circle-half', 'bi-highlights');
  icon.classList.add(contrast === 'high' ? 'bi-highlights' : 'bi-circle-half');
};

const setPressedState = (button, contrast) => {
  button.setAttribute('aria-pressed', contrast === 'high' ? 'true' : 'false');
};

const initContrastToggle = () => {
  const button = requireEl('[data-contrast-toggle]', { module: 'contrast-toggle' });
  if (!button) {return;}
  const root = document.documentElement;
  const getCurrent = () => (root.dataset.contrast === 'high' ? 'high' : 'normal');
  const current = getCurrent();
  setIcon(button, current);
  setPressedState(button, current);

  button.addEventListener('click', () => {
    const next = getCurrent() === 'high' ? 'normal' : 'high';
    setContrast(next);
    setIcon(button, next);
    setPressedState(button, next);
    try {
      window.localStorage.setItem(STORAGE_KEY, next);
    } catch (e) {
      // ignore storage errors
    }
  });
};

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', initContrastToggle);
} else {
  initContrastToggle();
}
