/**
 * Projects route group — projects module.
 * Mounted at /api/projects in apps/zync-api/src/routes/index.ts (via manifest).
 *
 * All sub-routes run behind authMiddleware + requireModuleEnabled('projects')
 * so the session + db handle are populated and the module is gated.
 */
import { Hono } from 'hono'
import type { AppEnv } from '../../types'
import { authMiddleware } from '../../middleware/auth'
import { requireModuleEnabled } from '../../middleware/require-module-enabled'
import { projectCrudRoute } from './crud'
import { projectMembersRoute } from './members'
import { projectReportsRoute } from './reports'
import { projectBudgetRoute } from './budget'
// wave-7: project lifecycle, milestones, analytics
import { projectLifecycleRoutes } from './lifecycle'
import { projectMilestoneRoutes } from './milestones'
import { projectAnalyticsRoutes } from './analytics'
// wave-8: project gantt
import { projectGanttRoutes } from './gantt'
import { projectCriticalPathRoute } from './critical-path'
import { projectFromTemplateRoute } from './from-template'
import { projectSaveAsTemplateRoute } from './save-as-template'

const projectRoutes = new Hono<AppEnv>()

// All project routes require an authenticated session
projectRoutes.use('*', authMiddleware)

// All project routes require the 'projects' module to be enabled for the tenant
projectRoutes.use('*', requireModuleEnabled('projects'))

// Mount sub-routers
projectRoutes.route('/', projectCrudRoute)
projectRoutes.route('/', projectMembersRoute)
projectRoutes.route('/', projectReportsRoute)
// wave-6: project-hourly-budget
projectRoutes.route('/', projectBudgetRoute)
// wave-7: lifecycle, milestones, analytics
projectRoutes.route('/', projectLifecycleRoutes)
projectRoutes.route('/', projectMilestoneRoutes)
projectRoutes.route('/', projectAnalyticsRoutes)
// wave-8: gantt
projectRoutes.route('/', projectGanttRoutes)
projectRoutes.route('/', projectCriticalPathRoute)
projectRoutes.route('/', projectFromTemplateRoute)
projectRoutes.route('/', projectSaveAsTemplateRoute)

export { projectRoutes }
