package main

import (
	"net/url"
	"strings"
)

type UrlParams struct {
	url.URL
	QueryMap    map[string]string
	FragmentMap map[string]string
}

func parseUrlParams(urlSource string) (urlParams *UrlParams) {
	URL, err := url.Parse(urlSource)

	if err != nil {
		URL = &url.URL{}
	}

	urlParams = &UrlParams{
		QueryMap:    parseStringParams(URL.RawQuery),
		FragmentMap: parseStringParams(URL.Fragment),
	}
	urlParams.Scheme = URL.Scheme
	urlParams.Opaque = URL.Opaque
	urlParams.User = URL.User
	urlParams.Host = URL.Host
	urlParams.Path = URL.Path
	urlParams.RawPath = URL.RawPath
	urlParams.ForceQuery = URL.ForceQuery
	urlParams.RawQuery = URL.RawQuery
	urlParams.Fragment = URL.Fragment
	return
}
func parseStringParams(query string) (params map[string]string) {
	params = map[string]string{}

	if query != "" {
		paramsStrings := strings.Split(query, "&")
		for _, s := range paramsStrings {
			p := strings.Split(s, "=")
			if len(p) == 2 {
				params[p[0]], _ = url.QueryUnescape(p[1])
			} else {
				params[p[0]] = ""
			}
		}
	}
	return
}
