package nat

import (
	"fmt"
	"reflect"
	"testing"
)

func TestSortUniquePorts(t *testing.T) {
	ports := []Port{
		Port("6379/tcp"),
		Port("22/tcp"),
	}

	Sort(ports, func(ip, jp Port) bool {
		return ip.Int() < jp.Int() || (ip.Int() == jp.Int() && ip.Proto() == "tcp")
	})

	first := ports[0]
	if fmt.Sprint(first) != "22/tcp" {
		t.Log(fmt.Sprint(first))
		t.Fail()
	}
}

func TestSortSamePortWithDifferentProto(t *testing.T) {
	ports := []Port{
		Port("8888/tcp"),
		Port("8888/udp"),
		Port("6379/tcp"),
		Port("6379/udp"),
	}

	Sort(ports, func(ip, jp Port) bool {
		return ip.Int() < jp.Int() || (ip.Int() == jp.Int() && ip.Proto() == "tcp")
	})

	first := ports[0]
	if fmt.Sprint(first) != "6379/tcp" {
		t.Fail()
	}
}

func TestSortPortMap(t *testing.T) {
	ports := []Port{
		Port("22/tcp"),
		Port("22/udp"),
		Port("8000/tcp"),
		Port("6379/tcp"),
		Port("9999/tcp"),
	}

	portMap := PortMap{
		Port("22/tcp"): []PortBinding{
			{},
		},
		Port("8000/tcp"): []PortBinding{
			{},
		},
		Port("6379/tcp"): []PortBinding{
			{},
			{HostIp: "0.0.0.0", HostPort: "32749"},
		},
		Port("9999/tcp"): []PortBinding{
			{HostIp: "0.0.0.0", HostPort: "40000"},
		},
	}

	SortPortMap(ports, portMap)
	if !reflect.DeepEqual(ports, []Port{
		Port("9999/tcp"),
		Port("6379/tcp"),
		Port("8000/tcp"),
		Port("22/tcp"),
		Port("22/udp"),
	}) {
		t.Errorf("failed to prioritize port with explicit mappings, got %v", ports)
	}
	if pm := portMap[Port("6379/tcp")]; !reflect.DeepEqual(pm, []PortBinding{
		{HostIp: "0.0.0.0", HostPort: "32749"},
		{},
	}) {
		t.Errorf("failed to prioritize bindings with explicit mappings, got %v", pm)
	}
}
