import { createFileRoute } from '@tanstack/react-router'
import { json } from '@tanstack/react-start'
import { z } from 'zod'

const BodySchema = z.object({
  provider: z.string(),
})

export const Route = createFileRoute('/api/oauth/device-code')({
  server: {
    handlers: {
      POST: async ({ request }) => {
        let body: unknown
        try {
          body = await request.json()
        } catch {
          return json({ error: 'Invalid JSON' }, { status: 400 })
        }

        const parsed = BodySchema.safeParse(body)
        if (!parsed.success) {
          return json({ error: 'Missing provider' }, { status: 400 })
        }

        const { provider } = parsed.data

        if (provider === 'nous') {
          try {
            const res = await fetch('https://portal.nousresearch.com/api/oauth/device/code', {
              method: 'POST',
              headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
              body: 'client_id=hermes-cli',
            })
            const data = await res.json()
            if (!res.ok) {
              return json({ error: data.error || 'Device code request failed' }, { status: res.status })
            }
            return json(data)
          } catch (err) {
            return json({ error: err instanceof Error ? err.message : 'Network error' }, { status: 500 })
          }
        }

        return json({ error: `OAuth device flow not supported for provider: ${provider}` }, { status: 400 })
      },
    },
  },
})
