// meta4ra -- Metalink 4.0 utilities
// Copyright (C) 2021-2026 Sergey Matveev <stargrave@stargrave.org>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, version 3 of the License.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

package internal

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

func (u *URL) String() string {
	return fmt.Sprintf("%d|%s|%s", u.Priority, u.Location, u.URL)
}

func ParseURL(s string) (*URL, error) {
	cols := strings.SplitN(s, "|", 3)
	switch len(cols) {
	case 1:
		return &URL{URL: cols[0]}, nil
	case 3:
		var p uint64
		var err error
		if cols[0] != "" {
			p, err = strconv.ParseUint(cols[0], 10, 32)
			if err != nil {
				return nil, err
			}
		}
		return &URL{
			Priority: uint(p),
			Location: cols[1],
			URL:      cols[2],
		}, nil
	default:
		return nil, errors.New("bad URL format")
	}
}
