/**
 * Pure tab-visibility logic for the project sub-navigation.
 *
 * Extracted from `components/project/project-tabs.tsx` so the visibility rules
 * are unit-testable without pulling in next/link. The component stays purely
 * presentational.
 */

export interface ProjectTab {
  href: string
  label: string
  exact: boolean
}

export function buildProjectTabs(
  projectId: string,
  typeCodes: string[],
  hasOeeRecords = false,
): ProjectTab[] {
  const tabs: ProjectTab[] = [
    { href: `/project/${projectId}`, label: 'Übersicht', exact: true },
    { href: `/project/${projectId}/dokumente`, label: 'Dokumente', exact: false },
    { href: `/project/${projectId}/team`, label: 'Team', exact: false },
    { href: `/project/${projectId}/agenda`, label: 'Agenda', exact: false },
  ]

  const seen = new Set(tabs.map((t) => t.href))
  function add(tab: ProjectTab) {
    if (!seen.has(tab.href)) {
      tabs.push(tab)
      seen.add(tab.href)
    }
  }

  if (typeCodes.includes('lsc_workshop')) {
    add({ href: `/project/${projectId}/stopwatch`, label: 'Stoppuhr', exact: false })
    add({ href: `/project/${projectId}/shift-output`, label: 'Schicht', exact: false })
    add({ href: `/project/${projectId}/workshop`, label: 'Maßnahmen', exact: false })
    add({ href: `/project/${projectId}/qaf`, label: 'QAF', exact: false })
    add({ href: `/project/${projectId}/export`, label: 'Export', exact: false })
  }

  if (typeCodes.includes('fabrikanalyse')) {
    add({ href: `/project/${projectId}/analyse`, label: 'Fabrikanalyse', exact: false })
  }

  if (typeCodes.includes('investplausibilisierung')) {
    add({ href: `/project/${projectId}/invest`, label: 'Invest', exact: false })
  }

  if (typeCodes.includes('praeventionsteam')) {
    add({ href: `/project/${projectId}/plt`, label: 'PLT', exact: false })
  }

  if (typeCodes.includes('360_workshop')) {
    add({ href: `/project/${projectId}/workshop`, label: 'Workshop', exact: false })
  }

  // OEE module is always visible — new records are entered via the project-scoped
  // Kalkulator, so we cannot gate on existing records.
  add({ href: `/project/${projectId}/oee`, label: 'OEE', exact: false })

  return tabs
}
