/**
 * Calendar route group — calendar-module.
 *
 * All calendar-specific routes are assembled here.
 * Mounted in apps/zync-api/src/index.ts (via manifest).
 *
 * Routes:
 *   /api/calendar/*           — events CRUD + connections (authMiddleware + requireModuleEnabled)
 *   /api/auth/google-calendar — Google OAuth
 *   /api/auth/outlook — Outlook OAuth
 *   /api/webhooks/calendar/*  — sync webhooks (no auth, rate-limited)
 *   /api/webhooks/scheduling/* — scheduling webhooks (no auth, rate-limited, HMAC-verified)
 *   /api/cron/calendar-sync   — cron (internal guard)
 */
import { Hono } from 'hono'
import type { AppEnv } from '../../types'
import { authMiddleware } from '../../middleware/auth'
import { requireModuleEnabled } from '../../middleware/require-module-enabled'
import { calendarEventsRoute } from './events'
import { calendarConnectionsRoute } from './connections'
import { schedulingSettingsRoute } from './scheduling-settings'
import { calendarTasksRoute } from './calendar-tasks'
import { oauthGoogleRoute } from './oauth-google'
import { oauthOutlookRoute } from './oauth-outlook'
import { syncWebhooksRoute } from './sync-webhooks'
import { schedulingWebhooksRoute } from './scheduling-webhooks'
import { cronSyncRoute } from './cron-sync'

// ── Authenticated + module-gated calendar routes ──────────────────────────────

const calendarRouter = new Hono<AppEnv>()
calendarRouter.use('*', authMiddleware)
calendarRouter.use('*', requireModuleEnabled('calendar'))
calendarRouter.route('/', calendarEventsRoute)
calendarRouter.route('/', calendarTasksRoute)
calendarRouter.route('/', calendarConnectionsRoute)
calendarRouter.route('/', schedulingSettingsRoute)

// ── Google OAuth ──────────────────────────────────────────────────────────────

const googleOAuthRouter = new Hono<AppEnv>()
googleOAuthRouter.route('/', oauthGoogleRoute)

// ── Outlook OAuth ─────────────────────────────────────────────────────────────

const outlookOAuthRouter = new Hono<AppEnv>()
outlookOAuthRouter.route('/', oauthOutlookRoute)

// ── Cron (guarded by CRON_SECRET inside handler — no authMiddleware) ──────────

const cronRouter = new Hono<AppEnv>()
cronRouter.route('/', cronSyncRoute)

export {
  calendarRouter,
  googleOAuthRouter,
  outlookOAuthRouter,
  syncWebhooksRoute,
  schedulingWebhooksRoute,
  cronRouter,
}
