package main

import (
	"testing"

	"github.com/matryer/is"
)

func TestUserAgentParser(t *testing.T) {
	is := is.New(t)
	ua := `Mozilla/5.0 (Linux; Android 7.1.2; Redmi Note 3 Build/NJH47F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.98 Mobile Safari/537.36`
	hit := map[string]string{}
	useragent(hit, ua)

	val, ok := hit["Browser"]
	is.True(ok)
	is.Equal(val, "Chrome Mobile")
	val, ok = hit["DeviceModel"]
	is.True(ok)
	is.Equal(val, "Redmi Note 3")
	val, ok = hit["DeviceBrand"]
	is.True(ok)
	is.Equal(val, "XiaoMi")
}

func TestUserAgentWinParser(t *testing.T) {
	is := is.New(t)
	ua := `Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36 OPR/52.0.2871.40`
	hit := map[string]string{}
	useragent(hit, ua)

	val, ok := hit["Browser"]
	is.True(ok)
	is.Equal(val, "Opera")
	val, ok = hit["OperatingSystem"]
	is.True(ok)
	is.Equal(val, "Windows 8.1")
	// val, ok = hit["DeviceBrand"]
	// is.True(ok)
	// is.Equal(val, "XiaoMi")
}

func TestOperatingSystemVersion(t *testing.T) {
	is := is.New(t)
	ua := `Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.112 Safari/537.36`

	hit := map[string]string{}
	useragent(hit, ua)

	is.Equal(hit["OperatingSystem"], "Windows Vista")
	is.Equal(hit["OperatingSystemMajorVersion"], "0")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")

	ua = `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36`

	hit = map[string]string{}
	useragent(hit, ua)

	is.Equal(hit["OperatingSystem"], "Windows 10")
	is.Equal(hit["OperatingSystemMajorVersion"], "0")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")
}

func TestParseNumericVersions(t *testing.T) {
	is := is.New(t)
	hit := map[string]string{}

	ua := `Mozilla/5.0 (Linux; Android x7.minor1.update2; Redmi Note 3 Build/NJH47F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61ch.0ro.3163me.98 Mobile Safari/537saf.ar36i`
	useragent(hit, ua)
	is.Equal(hit["OperatingSystem"], "Android")
	is.Equal(hit["OperatingSystemMajorVersion"], "0")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")
	is.Equal(hit["OperatingSystemPatchVersion"], "0")
	is.Equal(hit["Browser"], "Safari")
	is.Equal(hit["BrowserMajorVersion"], "0")
	is.Equal(hit["BrowserMinorVersion"], "0")

	ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.000000 Mobile/15E148`
	useragent(hit, ua)
	is.Equal(hit["OperatingSystem"], "iOS")
	is.Equal(hit["OperatingSystemMajorVersion"], "14")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")
	is.Equal(hit["OperatingSystemPatchVersion"], "1")

	is.Equal(hit["Browser"], "Mobile Safari UI/WKWebView")
	is.Equal(hit["BrowserMajorVersion"], "14")
	is.Equal(hit["BrowserMinorVersion"], "0")

	ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/014.000100 Mobile/15E148`
	useragent(hit, ua)
	is.Equal(hit["OperatingSystem"], "iOS")
	is.Equal(hit["OperatingSystemMajorVersion"], "14")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")
	is.Equal(hit["OperatingSystemPatchVersion"], "1")

	is.Equal(hit["Browser"], "Mobile Safari UI/WKWebView")
	is.Equal(hit["BrowserMajorVersion"], "14")
	is.Equal(hit["BrowserMinorVersion"], "100")

	ua = `Mozilla/5.0 (iPhone; CPU iPhone OS 14_0_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/15.100000 Mobile/15E148`
	useragent(hit, ua)
	is.Equal(hit["OperatingSystem"], "iOS")
	is.Equal(hit["OperatingSystemMajorVersion"], "14")
	is.Equal(hit["OperatingSystemMinorVersion"], "0")
	is.Equal(hit["OperatingSystemPatchVersion"], "1")

	is.Equal(hit["Browser"], "Mobile Safari UI/WKWebView")
	is.Equal(hit["BrowserMajorVersion"], "15")
	is.Equal(hit["BrowserMinorVersion"], "100000")
}
