import { describe, expect, it, vi } from 'vitest'
import { Hono } from 'hono'
import type { AppEnv } from '../src/types'

vi.mock('../src/middleware/auth', () => ({
  authMiddleware: async (_c: unknown, next: () => Promise<void>) => next(),
}))

vi.mock('../src/middleware/require-module-enabled', () => ({
  requireModuleEnabled: () => async (_c: unknown, next: () => Promise<void>) => next(),
}))

vi.mock('../src/routes/projects/crud', () => ({
  projectCrudRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/members', () => ({
  projectMembersRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/reports', () => ({
  projectReportsRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/budget', () => ({
  projectBudgetRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/lifecycle', () => ({
  projectLifecycleRoutes: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/milestones', () => ({
  projectMilestoneRoutes: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/analytics', () => ({
  projectAnalyticsRoutes: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/gantt', () => ({
  projectGanttRoutes: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/projects/critical-path', () => {
  const route = new Hono<AppEnv>()
  route.get('/:id/critical-path', (c) => c.json({ ok: true, projectId: c.req.param('id') }, 200))
  return { projectCriticalPathRoute: route }
})

describe('projects router critical path mount', () => {
  it('mounts /api/projects/:id/critical-path', async () => {
    const { projectRoutes } = await import('../src/routes/projects')

    const app = new Hono<AppEnv>()
    app.route('/api/projects', projectRoutes)

    const res = await app.request('/api/projects/project-1/critical-path')

    expect(res.status).toBe(200)
    await expect(res.json()).resolves.toEqual({ ok: true, projectId: 'project-1' })
  }, 30_000)
})
