package cryptparse

import (
	`fmt`
	`net/url`
	`reflect`

	`r00t2.io/goutils/structutils`
)

/*
	reflectFlatUri is the reflection used for a TlsFlat when converting to a TlsUri.
*/
func reflectFlatUri(s *TlsFlat, tagName string) (tu *TlsUri, err error) {

	var uri *url.URL
	var field reflect.StructField
	var fieldVal reflect.Value
	var params url.Values = make(url.Values)
	var sVal reflect.Value = reflect.ValueOf(s)
	var sType reflect.Type = sVal.Type()
	var kind reflect.Kind = sType.Kind()
	var parsedTagOpts map[string]bool

	if s == nil {
		return
	}

	if uri, err = url.Parse(fmt.Sprintf("tls://%s", s.Host)); err != nil {
		return
	}
	if s.Port != nil {
		uri.Host = fmt.Sprintf("%s:%d", uri.Host, *s.Port)
	}

	for i := 0; i < sType.NumField(); i++ {
		field = sType.Field(i)
		fieldVal = sVal.Field(i)
		if !fieldVal.CanSet() {
			continue
		}

		parsedTagOpts = structutils.TagToBoolMap(field, "tlsUri")
		if parsedTagOpts["-"] {
			continue
		}

	}

	// TODO

	if len(params) != 0 {
		if uri.Path == "" {
			uri.Path = "/"
		}
		if uri, err = url.Parse(fmt.Sprintf("%s%s", uri.String(), params.Encode())); err != nil {
			return
		}
	}
	tu = &TlsUri{
		URL: uri,
	}

	return
}