class LmContextualChunkTool
  # description "Gets the chunk immediately before, the chunk itself, and the chunk immediately after a specific chunk ID."

  params do
    string :chunk_id, description: "The *full* ID of the chunk to get context for, in the exact 'transcriptID-chunkIndex' format (e.g., '31732-0')."
  end

  def execute(chunk_id:)
    # --- 1. Parse the incoming ID ---
    parts = chunk_id.rpartition("-")

    return "Error: Invalid chunk_id format. Expected 'transcriptID-chunkIndex', but got '#{chunk_id}'." unless parts[1] == "-" && parts.last.match?(/^\d+$/)

    transcript_id = parts.first
    current_index = parts.last.to_i

    # --- 2. Calculate previous and next indices ---
    prev_index = current_index - 1
    next_index = current_index + 1

    # --- 3. Fetch the three chunks ---
    prev_chunk_id = prev_index >= 0 ? "#{transcript_id}-#{prev_index}" : nil
    prev_chunk = fetch_chunk_text_from_db(prev_chunk_id)

    current_chunk_id = chunk_id
    current_chunk = fetch_chunk_text_from_db(current_chunk_id)

    next_chunk_id = "#{transcript_id}-#{next_index}"
    next_chunk = fetch_chunk_text_from_db(next_chunk_id)

    # --- 4. Assemble and return the context ---
    response = [
      { id: prev_chunk_id, text: prev_chunk },
      { id: current_chunk_id, text: current_chunk },
      { id: next_chunk_id, text: next_chunk }
    ]

    # Format the output clearly for the LLM
    response_text = response
                    .reject { |chunk| chunk[:text].nil? }
                    .map { |chunk| "--- Chunk #{chunk[:id]} ---\n#{chunk[:text]}" }
                    .join("\n\n")

    return "No context found for '#{chunk_id}'." if response_text.empty?

    response_text
  rescue StandardError => e
    puts "Error in ContextualChunkTool: #{e.message}\n#{e.backtrace.join("\n")}"
    "Error processing chunk_id '#{chunk_id}'. Make sure it is in the correct format."
  end
end
