/**
 * Critical-path route — task-dependencies.
 *
 * Mounted in routes/projects/index.ts (which applies authMiddleware +
 * requireModuleEnabled('projects')). This route additionally requires
 * the 'tasks' module, Business+ tier, and projects:read permission.
 *
 * GET /api/projects/:id/critical-path
 *   → { critical_task_ids: string[], critical_dependency_ids: string[] }
 */
import { Hono } from 'hono'
import type { AppEnv } from '../../types'
import { requirePermission, requireTier } from '../../middleware/guards'
import { requireModuleEnabled } from '../../middleware/require-module-enabled'
import { TenantTier } from '@zync/types'
import { getCachedCriticalPath } from '@zync/db/queries'

export const projectCriticalPathRoute = new Hono<AppEnv>()

// Require tasks module enabled (projects module is already required by the parent router)
projectCriticalPathRoute.use('*', requireModuleEnabled('tasks'))
// Business+ only
projectCriticalPathRoute.use('*', requireTier(TenantTier.BUSINESS))

// GET /api/projects/:id/critical-path
projectCriticalPathRoute.get(
  '/:id/critical-path',
  requirePermission('projects:read'),
  async (c) => {
    const session = c.get('session')
    if (!session || session.type !== 'user' || !session.tid) {
      return c.json({ error: 'Unauthorized' }, 401)
    }

    const projectId = c.req.param('id')
    const db = c.get('db')
    const tenantId = session.tid

    const result = await getCachedCriticalPath(c.env, db, tenantId, projectId)
    return c.json(result, 200)
  },
)
