package regionalapi

import (
	"encoding/json"
	"fmt"
	"net/url"

	"google.golang.org/protobuf/encoding/protojson"
	"google.golang.org/protobuf/proto"
)

func proto2QueryParams(obj proto.Message) (url.Values, error) {
	m, err := proto2Map(obj)
	if err != nil {
		return nil, err
	}

	params := make(url.Values, len(m))
	for k, v := range m {
		switch val := v.(type) {
		case string:
			params.Set(k, val)
		case []string:
			for _, s := range val {
				params.Add(k, s)
			}
		case []any:
			for _, a := range val {
				params.Add(k, fmt.Sprintf("%v", a))
			}
		default:
			params.Set(k, fmt.Sprintf("%v", val))
		}
	}
	return params, nil
}

func proto2Map(obj proto.Message) (map[string]any, error) {
	b, err := protojson.Marshal(obj)
	if err != nil {
		return nil, err
	}
	m := make(map[string]any)
	err = json.Unmarshal(b, &m)
	if err != nil {
		return nil, err
	}
	return m, nil
}
