package locodedb

import (
	"fmt"

	locodecolumn "git.frostfs.info/TrueCloudLab/frostfs-locode-db/pkg/locode/column"
)

// CountryCode represents a country code for
// the storage in the FrostFS location database.
type CountryCode locodecolumn.CountryCode

// CountryCodeFromString parses a string UN/LOCODE country code
// and returns a CountryCode.
func CountryCodeFromString(s string) (*CountryCode, error) {
	cc, err := locodecolumn.CountryCodeFromString(s)
	if err != nil {
		return nil, fmt.Errorf("could not parse country code: %w", err)
	}

	return CountryFromColumn(cc)
}

// CountryFromColumn converts a UN/LOCODE country code to a CountryCode.
func CountryFromColumn(cc *locodecolumn.CountryCode) (*CountryCode, error) {
	return (*CountryCode)(cc), nil
}

func (c *CountryCode) String() string {
	syms := (*locodecolumn.CountryCode)(c).Symbols()
	return string(syms[:])
}