package ui

import (
	"git.wamblee.org/converge/pkg/models"
	"net/http"
	"regexp"
	"strings"
	"time"
)

func GetUserLocation(r *http.Request) (*time.Location, error) {
	tzName := r.URL.Query().Get("timezone")
	if tzName == "" {
		tzName = r.Header.Get("X-Timezone")
	}
	if tzName == "" {
		tzName = "UTC"
	}
	return time.LoadLocation(tzName)
}

func getConvergeAccess(r *http.Request) models.ConvergeAccess {

	pattern := regexp.MustCompile("^(.*)/usage$")
	matches := pattern.FindStringSubmatch(r.URL.Path)
	contextPath := ""
	if len(matches) == 2 {
		contextPath = matches[1]
	}

	secure := ""
	if r.TLS == nil {
		secure = ""
	} else {
		secure = "s"
	}
	for _, header := range []string{"X-Forwarded-Proto", "X-Scheme", "X-Forwarded-Scheme"} {
		values := r.Header.Values(header)
		for _, value := range values {
			if strings.ToLower(value) == "https" {
				secure = "s"
			}
		}
	}

	location, err := GetUserLocation(r)
	if err != nil {
		panic(err)
	}
	baseUrl := strings.ReplaceAll(r.Host+contextPath, "//", "/")
	return models.ConvergeAccess{
		Secure:   secure,
		BaseUrl:  baseUrl,
		Location: location,
	}
}