package git

import (
	"errors"
	"fmt"
	"strings"

	"github.com/goreleaser/goreleaser/pkg/config"
)

// ExtractRepoFromConfig gets the repo name from the Git config.
func ExtractRepoFromConfig() (result config.Repo, err error) {
	if !IsRepo() {
		return result, errors.New("current folder is not a git repository")
	}
	out, err := Run("config", "--get", "remote.origin.url")
	if err != nil {
		return result, fmt.Errorf("repository doesn't have an `origin` remote")
	}
	return ExtractRepoFromURL(out), nil
}

func ExtractRepoFromURL(s string) config.Repo {
	// removes the .git suffix and any new lines
	s = strings.NewReplacer(
		".git", "",
		"\n", "",
	).Replace(s)
	// if the URL contains a :, indicating a SSH config,
	// remove all chars until it, including itself
	// on HTTP and HTTPS URLs it will remove the http(s): prefix,
	// which is ok. On SSH URLs the whole user@server will be removed,
	// which is required.
	s = s[strings.LastIndex(s, ":")+1:]
	// split by /, the last to parts should be the owner and name
	ss := strings.Split(s, "/")
	return config.Repo{
		Owner: ss[len(ss)-2],
		Name:  ss[len(ss)-1],
	}
}
