package util

import (
	"net/http"
	"strings"
	"time"
)

const (
	ServiceRadio  = "radio"
	ServiceFiles  = "files"
	ServiceUpload = "upload"
	ServiceGit    = "git"
	ServiceHome   = "home"
)

// GetServiceByHost returns a service's URL depending on what type of network
// is accessed (www, i2p, yggdrasil).
func GetServiceByHost(host, service string) string {
	if strings.HasSuffix(host, "i2p") {
		switch service {
		case "radio":
			return "http://radio.arav.i2p"
		case "files":
			return "http://files.arav.i2p"
		case "upload":
			return "http://upload.arav.i2p"
		case "git":
			return "http://git.arav.i2p"
		default:
			return "http://arav.i2p"
		}
	} else if strings.HasPrefix(host, "[300") {
		switch service {
		case "radio":
			return "http://[300:a98d:d6d0:8a08::e]"
		case "files":
			return "http://[300:a98d:d6d0:8a08::d]"
		case "upload":
			return "http://[300:a98d:d6d0:8a08::c]"
		case "git":
			return "http://[300:a98d:d6d0:8a08::b]"
		default:
			return "http://[300:a98d:d6d0:8a08::f]"
		}
	} else if strings.HasSuffix(host, "onion") {
		switch service {
		case "radio":
			return "http://wsmkgnmhmzqm7kyzv7jnzzafvgm7xlmlfvzhgorpapd5or2arnhuktqd.onion"
		case "files":
			return "http://qf5e43nlhvnrutmikuvbdfj3cmtthokpbaxtkm6mjlslttzvtgm4fxid.onion"
		case "upload":
			return "http://4usftbmjpfexkr2x5xbp5ukmygpmg4fgrnx2wbifsexqctooz5hmviyd.onion"
		case "git":
			return "http://qqitm7qlsbbubwmjos4cqzmvkqidg34rfnbyhuydhalep33fbvh22xyd.onion"
		default:
			return "http://moq7aejnf4xk5k2bkaltli3ftkhusy2mbrd3pj23nrca343ku2mgk4yd.onion"
		}
	} else {
		switch service {
		case "radio":
			return "https://radio.arav.su"
		case "files":
			return "https://files.arav.su"
		case "upload":
			return "https://upload.arav.su"
		case "git":
			return "https://git.arav.su"
		default:
			return "https://arav.su"
		}
	}
}

// ToClientTimezone converts given time to timezone set in a
// X-Client-Timezone header. If this header is not set, then
// converts to UTC.
func ToClientTimezone(t time.Time, r *http.Request) time.Time {
	if tz := r.Header.Get("X-Client-Timezone"); tz != "" {
		loc, err := time.LoadLocation(tz)
		if err != nil {
			return t.UTC()
		}
		return t.In(loc)
	}

	return t.UTC()
}
