package form

import (
	"net/http"
	"strings"
)

type Cursor struct {
	PerPage    int
	Pagination bool
	Name       string
	Val        string
	Colspan    int
}

func (cursor *Cursor) FillValue(r *http.Request) {
	cursor.Val = strings.TrimSpace(r.FormValue(cursor.Name))
	cursor.Pagination = cursor.Val != ""
}

func (cursor *Cursor) Params() []string {
	return strings.Split(cursor.Val, ";")
}

func BuildCursor[K interface{}](cursor *Cursor, elems []K, build func(K) []string) []K {
	if len(elems) <= cursor.PerPage {
		cursor.Val = ""
		return elems
	}
	elems = elems[:cursor.PerPage]
	cursor.Val = strings.Join(build(elems[cursor.PerPage-1]), ";")
	return elems
}