//
//  Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
//  Licensed under the Apache License, Version 2.0 (the "License");
//  you may not use this file except in compliance with the License.
//  You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
//  Unless required by applicable law or agreed to in writing, software
//  distributed under the License is distributed on an "AS IS" BASIS,
//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//  See the License for the specific language governing permissions and
//  limitations under the License.
//

package task

// AddPositions adds position fields to a chunk map.
// Input positions is a flat []float64 grouped as [pn, left, right, top, bottom]
// every 5 elements. pn is ALREADY 1-indexed — the 0→1 conversion happens
// once, at the parser boundary (normalizePDFPageNumber for the DeepDoc PDF
// path; TCADP writes 1-indexed directly). This function is a passthrough: it
// must NOT add +1, otherwise the PDF path (which already normalized) would
// double-increment page numbers.
//
// Mirrors Python: rag.nlp.add_positions() (Python adds +1 because its
// callers feed 0-indexed values; the Go pipeline normalizes earlier).
func AddPositions(chunk map[string]any, positions []float64) {
	if len(positions) == 0 || len(positions)%5 != 0 {
		return
	}
	n := len(positions) / 5
	pageNumInt := make([]int, 0, n)
	topInt := make([]int, 0, n)
	positionInt := make([][]int, 0, n)

	for i := 0; i < len(positions); i += 5 {
		pn := int(positions[i]) // already 1-indexed
		left := int(positions[i+1])
		right := int(positions[i+2])
		top := int(positions[i+3])
		bottom := int(positions[i+4])

		pageNumInt = append(pageNumInt, pn)
		topInt = append(topInt, top)
		positionInt = append(positionInt, []int{pn, left, right, top, bottom})
	}

	chunk["page_num_int"] = pageNumInt
	chunk["top_int"] = topInt
	chunk["position_int"] = positionInt
}
