package main

import (
	"strconv"
)

func ident(hit map[string]string, data *Payload) {
	hit["CounterID"] = strconv.Itoa(int(data.Ident.CounterID))
	_, err := strconv.ParseUint(data.Ident.ClientID, 10, 64)
	if err == nil {
		hit["ClientID"] = data.Ident.ClientID
	}
	_, err = strconv.ParseUint(data.Ident.VisitID, 10, 64)
	if err == nil {
		hit["VisitID"] = data.Ident.VisitID
	}

	hit["EventType"] = strconv.Itoa(int(data.EventType))

	hit["URL"] = data.URL
	hit["Referer"] = data.Referer
	hit["Title"] = data.Ident.Title
	hit["ElementName"] = data.ElementName
	hit["ElementValue"] = string(data.ElementValue)
	hit["ExtraValues"] = string(data.ExtraValues)
	hit["ABParams"] = data.ABParams

	hit["ExternalID"] = getStr(data.ExternalID)
	hit["YandexID"] = data.Ident.YandexID
	hit["GoogleID"] = parseGoogleID(data.Ident.GoogleID)

	hit["FormData"] = string(data.FormData)
	hit["PageCharset"] = data.Ident.PageCharset
	hit["NetworkType"] = data.Ident.NetworkType
	hit["ClientTimeZone"] = strconv.Itoa(int(data.Ident.ClientTimeZone))
	hit["CookieEnabled"] = strconv.Itoa(int(data.Ident.CookieEnabled))
	hit["PageLoadTime"] = strconv.Itoa(int(data.Ident.PageLoadTime))
	hit["LargestContentfulPaintTime"] = strconv.Itoa(int(data.Ident.LargestContentfulPaintTime))
	hit["BrowserLanguage"] = data.Ident.BrowserLanguage
	hit["JavaEnabled"] = strconv.Itoa(int(data.Ident.JavaEnabled))
	hit["NotificationsEnabled"] = strconv.Itoa(int(data.Ident.NotificationsEnabled))
	hit["IsIframe"] = strconv.Itoa(int(data.Ident.IsIframe))
	hit["ScreenColors"] = strconv.Itoa(int(data.Ident.ScreenColors))
	hit["ScreenHeight"] = strconv.Itoa(int(data.Ident.ScreenHeight))
	hit["ScreenWidth"] = strconv.Itoa(int(data.Ident.ScreenWidth))
	hit["WindowClientHeight"] = strconv.Itoa(int(data.Ident.WindowClientHeight))
	hit["WindowClientWidth"] = strconv.Itoa(int(data.Ident.WindowClientWidth))
	hit["SameSite"] = strconv.Itoa(int(data.SameSite))
	hit["PaystationVisit"] = data.Ident.PaystationVisit
	hit["CorpsiteVisit"] = data.Ident.CorpsiteVisit
	hit["PublisherAccountVisit"] = data.Ident.PublisherAccountVisit
	hit["DevelopersVisit"] = data.Ident.DevelopersVisit
	hit["FirstVisitedProduct"] = data.Ident.FirstVisitedProduct
}

func parseGoogleID(gid string) string {
	for _, v := range gid {
		if v != '.' && (v < '0' || v > '9') {
			return ""
		}
	}
	return gid
}

func parseNumberValue(id string) string {
	for _, v := range id {
		if v < '0' || v > '9' {
			return "0"
		}
	}
	return id
}

func getStr(v interface{}) string {
	switch v := v.(type) {
	case string:
		return v
	case float64:
		return strconv.Itoa(int(v))
	default:
		return ""
	}
}
