import { NextResponse } from 'next/server'
import {
  createDisciplinaireFeed,
  getDisciplinairesFeed,
} from '@/server/disciplinaire.server'
import {
  disciplinaireCreateSchema,
  disciplinaireListQuerySchema,
} from '@/validators/disciplinaires'
import { requireAuth } from '@/lib/requireAuth'

export async function GET(request: Request) {
  const authError = requireAuth(request)
  if (authError) return authError

  const { searchParams } = new URL(request.url)
  const parsed = disciplinaireListQuerySchema.safeParse({
    limit: searchParams.get('limit') || '10',
    offset: searchParams.get('offset') || '0',
  })

  if (!parsed.success) {
    return NextResponse.json(
      { message: 'Invalid query parameters', errors: parsed.error.flatten() },
      { status: 400 },
    )
  }

  const { items, count } = await getDisciplinairesFeed(
    parsed.data.limit,
    parsed.data.offset,
  )

  return NextResponse.json(
    { message: 'Disciplinaires retrieved successfully', items, count },
    { status: 200 },
  )
}

export async function POST(request: Request) {
  const authError = requireAuth(request)
  if (authError) return authError

  let body: unknown

  try {
    body = await request.json()
  } catch {
    return NextResponse.json(
      { message: 'Invalid JSON body' },
      { status: 400 },
    )
  }

  const parsed = disciplinaireCreateSchema.safeParse(body)

  if (!parsed.success) {
    return NextResponse.json(
      { message: 'Validation error', errors: parsed.error.flatten() },
      { status: 400 },
    )
  }

  const { disciplinaire } = await createDisciplinaireFeed(parsed.data)

return NextResponse.json(
  {
    message: 'Disciplinaire created successfully',
    disciplinaire,
  },
  { status: 201 },
)
}
