package fields

import (
	"strings"

	E "github.com/yusing/go-proxy/internal/error"
)

type StreamPort struct {
	ListeningPort Port `json:"listening"`
	ProxyPort     Port `json:"proxy"`
}

var ErrStreamPortTooManyColons = E.New("too many colons")

func ValidateStreamPort(p string) (StreamPort, error) {
	split := strings.Split(p, ":")

	switch len(split) {
	case 1:
		split = []string{"0", split[0]}
	case 2:
		break
	default:
		return StreamPort{}, ErrStreamPortTooManyColons.Subject(p)
	}

	listeningPort, lErr := ValidatePort(split[0])
	proxyPort, pErr := ValidatePort(split[1])
	if err := E.Join(lErr, pErr); err != nil {
		return StreamPort{}, err
	}

	return StreamPort{listeningPort, proxyPort}, nil
}