package http

import (
	"net/http"

	"github.com/gorilla/schema"

	"github.com/caos/zitadel/internal/errors"
)

type Parser struct {
	decoder *schema.Decoder
}

func NewParser() *Parser {
	d := schema.NewDecoder()
	d.IgnoreUnknownKeys(true)
	return &Parser{d}
}

func (p *Parser) Parse(r *http.Request, data interface{}) error {
	err := r.ParseForm()
	if err != nil {
		return errors.ThrowInternal(err, "FORM-lCC9zI", "error parsing http form")
	}

	return p.decoder.Decode(data, r.Form)
}