const root = document.documentElement;
const themeName = 'one-light-ui';

module.exports = {
  activate(state) {
    atom.config.observe(`${themeName}.fontSize`, setFontSize);
    atom.config.observe(`${themeName}.tabSizing`, setTabSizing);
    atom.config.observe(`${themeName}.tabCloseButton`, setTabCloseButton);
    atom.config.observe(`${themeName}.hideDockButtons`, setHideDockButtons);
    atom.config.observe(`${themeName}.stickyHeaders`, setStickyHeaders);

    // DEPRECATED: This can be removed at some point (added in Atom 1.17/1.18ish)
    // It removes `layoutMode`
    if (atom.config.get(`${themeName}.layoutMode`)) {
      atom.config.unset(`${themeName}.layoutMode`);
    }
  },

  deactivate() {
    unsetFontSize();
    unsetTabSizing();
    unsetTabCloseButton();
    unsetHideDockButtons();
    unsetStickyHeaders();
  }
};

// Font Size -----------------------

function setFontSize(currentFontSize) {
  root.style.fontSize = `${currentFontSize}px`;
}

function unsetFontSize() {
  root.style.fontSize = '';
}

// Tab Sizing -----------------------

function setTabSizing(tabSizing) {
  root.setAttribute(`theme-${themeName}-tabsizing`, tabSizing.toLowerCase());
}

function unsetTabSizing() {
  root.removeAttribute(`theme-${themeName}-tabsizing`);
}

// Tab Close Button -----------------------

function setTabCloseButton(tabCloseButton) {
  if (tabCloseButton === 'Left') {
    root.setAttribute(`theme-${themeName}-tab-close-button`, 'left');
  } else {
    unsetTabCloseButton();
  }
}

function unsetTabCloseButton() {
  root.removeAttribute(`theme-${themeName}-tab-close-button`);
}

// Dock Buttons -----------------------

function setHideDockButtons(hideDockButtons) {
  if (hideDockButtons) {
    root.setAttribute(`theme-${themeName}-dock-buttons`, 'hidden');
  } else {
    unsetHideDockButtons();
  }
}

function unsetHideDockButtons() {
  root.removeAttribute(`theme-${themeName}-dock-buttons`);
}

// Sticky Headers -----------------------

function setStickyHeaders(stickyHeaders) {
  if (stickyHeaders) {
    root.setAttribute(`theme-${themeName}-sticky-headers`, 'sticky');
  } else {
    unsetStickyHeaders();
  }
}

function unsetStickyHeaders() {
  root.removeAttribute(`theme-${themeName}-sticky-headers`);
}
