import { useEffect } from 'preact/hooks';
import { matchPath } from 'react-router-dom';
import { useSnapshot } from 'valtio';

import states from './states';

const { VITE_CLIENT_NAME: CLIENT_NAME } = import.meta.env;

export default function useTitle(title, path) {
  const snapStates = useSnapshot(states);
  const { currentLocation } = snapStates;
  const hasPaths = Array.isArray(path);
  let paths = hasPaths ? path : [];
  // Workaround for matchPath not working for optional path segments
  // https://github.com/remix-run/react-router/discussions/9862
  if (!hasPaths && /:?\w+\?/.test(path)) {
    paths.push(path.replace(/(:\w+)\?/g, '$1'));
    paths.push(path.replace(/\/?:\w+\?/g, ''));
  }
  let matched = false;
  if (paths.length) {
    matched = paths.some((p) => matchPath(p, currentLocation));
  } else if (path) {
    matched = matchPath(path, currentLocation);
  }
  console.debug({ paths, matched, currentLocation });
  useEffect(() => {
    if (!matched) return;
    document.title = title ? `${title} / ${CLIENT_NAME}` : CLIENT_NAME;
  }, [title, matched]);
}
