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/tasks', () => ({
  tasksRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/task-statuses', () => ({
  taskStatusesRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/tasks/recurring', () => ({
  recurringTasksRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/task-messages', () => ({
  taskMessagesRouter: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/task-dependencies', () => ({
  taskDependenciesRoute: new Hono<AppEnv>(),
}))

vi.mock('../src/routes/tasks/settings', () => {
  const route = new Hono<AppEnv>()
  route.get('/settings/sync', (c) => c.json({ ok: true }, 200))
  return { taskSettingsRoute: route }
})

describe('task module router', () => {
  it('mounts task sync settings under /api/tasks', async () => {
    const { taskModuleRouter } = await import('../src/routes/tasks-module')

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

    const res = await app.request('/api/tasks/settings/sync')

    expect(res.status).toBe(200)
    await expect(res.json()).resolves.toEqual({ ok: true })
  })
})
