import type { NavItemConfig } from '@/types/nav';

export function isNavItemActive({
  disabled,
  external,
  href,
  matcher,
  pathname,
}: Pick<NavItemConfig, 'disabled' | 'external' | 'href' | 'matcher'> & { pathname: string }): boolean {
  if (disabled || external) {
    return false;
  }

  if (matcher) {
    if (matcher.type === 'startsWith') {
      return pathname.startsWith(matcher.href);
    }

    if (matcher.type === 'equals') {
      return pathname === matcher.href;
    }

    return false;
  }

  if (!href) {
    return false;
  }

  return pathname === href;
}

export function isNavGroupActive(item: Omit<NavItemConfig, 'key'>, pathname: string): boolean {
  if (item.matcher && isNavItemActive({ ...item, pathname })) {
    return true;
  }

  return item.items?.some((child) => isNavItemActive({ ...child, pathname })) ?? false;
}
