package server

import (
	"net/http"

	routecontract "github.com/pingcap/agent-git-service/repositoryroutecontract"
)

var RepositoryCredential = routecontract.RepositoryCredential
var RepositoryIDAuthorizationTarget = routecontract.RepositoryIDAuthorizationTarget

func RepositoryAuthorizationTarget(request *http.Request) (string, string, bool) {
	match, ok := MatchRegisteredRoute(request)
	if !ok {
		return "", "", false
	}
	authority, activated := routecontract.ActivatedAuthority(match.Operation)
	if !activated {
		return "", "", false
	}
	switch authority {
	case routecontract.AuthorityRepositoryCredentialOrSession, routecontract.AuthorityGitCredentialOnly:
		if match.Repository == "" || match.Capability == "" {
			return "", "", false
		}
		return match.Repository, match.Capability, true
	default:
		return "", "", false
	}
}

func GitSmartHTTPAuthorizationTarget(request *http.Request) (string, string, bool) {
	match, ok := MatchRegisteredRoute(request)
	if !ok {
		return "", "", false
	}
	authority, activated := routecontract.ActivatedAuthority(match.Operation)
	if !activated || authority != routecontract.AuthorityGitCredentialOnly {
		return "", "", false
	}
	if match.Repository == "" || match.Capability == "" {
		return "", "", false
	}
	return match.Repository, match.Capability, true
}
