// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// TODO: Figure out what gopkg.in should do.

package modfetch

import (
	"cmd/go/internal/modfetch/codehost"
	"cmd/go/internal/modfetch/gitrepo"
	"fmt"
	"strings"
)

func parseGopkgIn(path string) (root, repo, major, subdir string, ok bool) {
	if !strings.HasPrefix(path, "gopkg.in/") {
		return
	}
	f := strings.Split(path, "/")
	if len(f) >= 2 {
		if elem, v, ok := dotV(f[1]); ok {
			root = strings.Join(f[:2], "/")
			repo = "github.com/go-" + elem + "/" + elem
			major = v
			subdir = strings.Join(f[2:], "/")
			return root, repo, major, subdir, true
		}
	}
	if len(f) >= 3 {
		if elem, v, ok := dotV(f[2]); ok {
			root = strings.Join(f[:3], "/")
			repo = "github.com/" + f[1] + "/" + elem
			major = v
			subdir = strings.Join(f[3:], "/")
			return root, repo, major, subdir, true
		}
	}
	return
}

func dotV(name string) (elem, v string, ok bool) {
	i := len(name) - 1
	for i >= 0 && '0' <= name[i] && name[i] <= '9' {
		i--
	}
	if i <= 2 || i+1 >= len(name) || name[i-1] != '.' || name[i] != 'v' || name[i+1] == '0' && len(name) != i+2 {
		return "", "", false
	}
	return name[:i-1], name[i:], true
}

func gopkginLookup(path string) (codehost.Repo, error) {
	root, _, _, _, ok := parseGopkgIn(path)
	if !ok {
		return nil, fmt.Errorf("invalid gopkg.in/ path: %q", path)
	}
	return gitrepo.Repo("https://"+root, root)
}
