import { NextResponse } from 'next/server'
import { getBridgeManager } from '@/lib/im/core/bridge-manager'
import { getCronEngine } from '@/lib/cron/engine'
import { isAuthError, requireUser } from '@/lib/auth/session'
import { listSettings, upsertUserSettings } from '@/lib/settings-store'

// Eagerly initialize singletons on first settings load (app startup).
// This ensures IM Bridge auto-reconnects and Cron Engine auto-starts
// without waiting for the user to navigate to those specific pages.
let _initialized = false
function ensureServicesStarted() {
  if (_initialized) return
  _initialized = true
  // BridgeManager: auto-reconnects enabled IM channels
  try { getBridgeManager() } catch (err) { console.error('[Settings] BridgeManager init error:', err) }
  // CronEngine: auto-starts if there are enabled tasks
  try { getCronEngine() } catch (err) { console.error('[Settings] CronEngine init error:', err) }
}

// GET /api/settings
export async function GET() {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  ensureServicesStarted()
  return NextResponse.json(listSettings(user.id))
}

// PUT /api/settings — upsert settings
export async function PUT(req: Request) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  const body = await req.json() as Record<string, string>
  upsertUserSettings(user.id, body)
  return NextResponse.json({ ok: true })
}
