import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'
import { memoryEchoService } from '@/lib/ai/services/memory-echo.service'

/**
 * GET /api/ai/echo/connections?noteId={id}&page={page}&limit={limit}
 * Fetch all connections for a specific note
 */
export async function GET(req: NextRequest) {
  try {
    const session = await auth()

    if (!session?.user?.id) {
      return NextResponse.json(
        { error: 'Unauthorized' },
        { status: 401 }
      )
    }

    // Get query parameters
    const { searchParams } = new URL(req.url)
    const noteId = searchParams.get('noteId')
    const page = parseInt(searchParams.get('page') || '1')
    const limit = parseInt(searchParams.get('limit') || '10')

    // Validate noteId
    if (!noteId) {
      return NextResponse.json(
        { error: 'noteId parameter is required' },
        { status: 400 }
      )
    }

    // Validate pagination parameters
    if (page < 1 || limit < 1 || limit > 50) {
      return NextResponse.json(
        { error: 'Invalid pagination parameters. page >= 1, limit between 1 and 50' },
        { status: 400 }
      )
    }

    // Get all connections for the note
    const allConnections = await memoryEchoService.getConnectionsForNote(noteId, session.user.id)

    // Calculate pagination
    const total = allConnections.length
    const startIndex = (page - 1) * limit
    const endIndex = startIndex + limit
    const paginatedConnections = allConnections.slice(startIndex, endIndex)

    // Format connections for response
    const connections = paginatedConnections.map(conn => {
      // Determine which note is the "other" note (not the target note)
      const isNote1Target = conn.note1.id === noteId
      const otherNote = isNote1Target ? conn.note2 : conn.note1

      return {
        noteId: otherNote.id,
        title: otherNote.title,
        content: otherNote.content,
        createdAt: otherNote.createdAt,
        similarity: conn.similarityScore,
        daysApart: conn.daysApart
      }
    })

    return NextResponse.json({
      connections,
      pagination: {
        total,
        page,
        limit,
        totalPages: Math.ceil(total / limit),
        hasNext: endIndex < total,
        hasPrev: page > 1
      }
    })

  } catch (error) {
    return NextResponse.json(
      { error: 'Failed to fetch connections' },
      { status: 500 }
    )
  }
}
