export interface StylesheetAttributes {
  media?: string;
}

export function injectStylesheet(
  stylesheetName: string,
  attributes: StylesheetAttributes = {},
) {
  const link = document.createElement('link');
  link.setAttribute('rel', 'stylesheet');
  link.setAttribute('href', stylesheetName);
  if ('media' in attributes) {
    link.setAttribute('media', attributes['media']);
  }
  document.head.appendChild(link);
  return link;
}

export function injectStyles(css: string) {
  injectStylesheet('data:text/css;charset=UTF-8,' + encodeURIComponent(css));
}

export function injectScript(scriptName: string, prepend = false) {
  const script = document.createElement('script');
  script.src = scriptName;
  const root = document.head || document.documentElement;
  if (prepend) {
    root.prepend(script);
  } else {
    root.append(script);
  }
}
