package packet

import (
	"fmt"
	"strconv"
	"strings"
)

type LargeCommunity struct {
	GlobalAdministrator uint32
	DataPart1           uint32
	DataPart2           uint32
}

func (c LargeCommunity) String() string {
	return fmt.Sprintf("(%d,%d,%d)", c.GlobalAdministrator, c.DataPart1, c.DataPart2)
}

func ParseCommunityString(s string) (com LargeCommunity, err error) {
	s = strings.Trim(s, "()")
	t := strings.Split(s, ",")

	if len(t) != 3 {
		return com, fmt.Errorf("can not parse large community %s", s)
	}

	v, err := strconv.ParseUint(t[0], 10, 32)
	if err != nil {
		return com, err
	}
	com.GlobalAdministrator = uint32(v)

	v, err = strconv.ParseUint(t[1], 10, 32)
	if err != nil {
		return com, err
	}
	com.DataPart1 = uint32(v)

	v, err = strconv.ParseUint(t[2], 10, 32)
	if err != nil {
		return com, err
	}
	com.DataPart2 = uint32(v)

	return com, err
}