package nostr

import (
	"cmp"
	"encoding/hex"
	"net/url"
	"strings"
)

func IsValidRelayURL(u string) bool {
	parsed, err := url.Parse(u)
	if err != nil {
		return false
	}
	if parsed.Scheme != "wss" && parsed.Scheme != "ws" {
		return false
	}
	return true
}

func IsValid32ByteHex(thing string) bool {
	if !isLowerHex(thing) {
		return false
	}
	if len(thing) != 64 {
		return false
	}
	_, err := hex.DecodeString(thing)
	return err == nil
}

func CompareEvent(a, b Event) int {
	if a.CreatedAt == b.CreatedAt {
		return strings.Compare(a.ID, b.ID)
	}
	return cmp.Compare(a.CreatedAt, b.CreatedAt)
}

func CompareEventReverse(b, a Event) int {
	if a.CreatedAt == b.CreatedAt {
		return strings.Compare(a.ID, b.ID)
	}
	return cmp.Compare(a.CreatedAt, b.CreatedAt)
}

func CompareEventPtr(a, b *Event) int {
	if a == nil {
		if b == nil {
			return 0
		} else {
			return -1
		}
	} else if b == nil {
		return 1
	}

	if a.CreatedAt == b.CreatedAt {
		return strings.Compare(a.ID, b.ID)
	}
	return cmp.Compare(a.CreatedAt, b.CreatedAt)
}

func CompareEventPtrReverse(b, a *Event) int {
	if a == nil {
		if b == nil {
			return 0
		} else {
			return -1
		}
	} else if b == nil {
		return 1
	}

	if a.CreatedAt == b.CreatedAt {
		return strings.Compare(a.ID, b.ID)
	}
	return cmp.Compare(a.CreatedAt, b.CreatedAt)
}