/**
= Creative Commons Lizenzvertrag =
Diese Software ist von der archium GmbH, Gera ist lizenziert unter einer Creative Commons Namensnennung - Nicht kommerziell - Keine Bearbeitungen 4.0 International Lizenz. (http://creativecommons.org/licenses/by-nc-nd/4.0/deed.de)
Individuelle über diese Lizenz hinausgehende Berechtigungen können Sie unter https://archium.org erhalten.

= Creative Commons License =
Software by archium GmbH, Gera is licensed under a Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. (http://creativecommons.org/licenses/by-nc-nd/4.0/)
Individual permissions beyond the scope of this license may be available at https://archium.org.
**/

package search

import (
	"fmt"
	"strings"

	//
	def "Toolbox/defaults"
	con "Toolbox/goDataverse/connect"
	tol "Toolbox/goDataverse/tools"
)

// #############################################################################
//
// der parameter "_q_=xxx" wird vor der abfrage in "q=xxx" umgewandelt. hierbei
// handelt es sich um einen workaround, der garantiert, dass die
// parameterreihenfolge bei der übergabe an die abfrage passt.
// aus diesem grund werden hier auch 2 durchläufe benötigt...
//
func SearchByParams(_dvp tol.TDVParams, _params tol.ColMapInt) (string, error) {
	var par tol.ColMapInt = make(tol.ColMapInt, 0)
	var url string = tol.GetSiteUrl(_dvp) + "/api/search?"
	// 1. durchlauf query parameter anhängen
	for _, ival := range _params {
		// log.Println("SearchByParams(param1):", ival)
		for key, val := range ival {
			if key == "_q_" {
				url = url + key + "=" + val
				break
			}
		}
	}
	// 2. durchlauf restliche parameter anhängen
	for _, ival := range _params {
		// log.Println("SearchByParams(param2):", ival)
		for key, val := range ival {
			if key != "_q_" {
				if key != "search" {
					url = url + "&" + key + "=" + val
				}
			}
		}
	}
	// def.LogMessage("", fmt.Sprintf("GetSearchResult(%v) > url: %v", "params", url), def.DEF_loginfo)
	fmt.Printf("GetSearchResult(%v) > url: %v\n", "params", url)
	response, err := con.GetRequestMap(url, par,
		map[string]string{"X-Dataverse-key": tol.GetApiKey(_dvp)})
	//
	return (fmt.Sprintf("%s", response)), err
}

func SearchSimple(_dvp tol.TDVParams, _alias string, _type string, _advanced string) (string, error) {
	var par tol.ColMapInt = make(tol.ColMapInt, 0)
	var url string = tol.GetSiteUrl(_dvp) + "/api/search?q=*%type%%alias%&per_page=1000%advanced%"
	//
	url = strings.ReplaceAll(url, "%alias%", _alias)
	url = strings.ReplaceAll(url, "%type%", _type)
	url = strings.ReplaceAll(url, "%advanced%", _advanced)
	//
	def.LogMessage("", fmt.Sprintf("GetSearchResult(%v) > url: %v", "params", url), def.DEF_logdebg)
	// log.Printf("GetSearchSimple(%v) > url: %v\n", "params", url)
	response, err := con.GetRequestMap(url, par,
		map[string]string{"X-Dataverse-key": tol.GetApiKey(_dvp)})
	//
	return (fmt.Sprintf("%s", response)), err
}
