package handler

import (
	"codeberg.org/codeberg/pages/server/cache"
	"codeberg.org/codeberg/pages/server/context"
	"codeberg.org/codeberg/pages/server/dns"
	"codeberg.org/codeberg/pages/server/gitea"
	"codeberg.org/codeberg/pages/server/upstream"
	"github.com/rs/zerolog"
)

func handleAuth(log zerolog.Logger, ctx *context.Context, giteaClient *gitea.Client,
	mainDomainSuffix string,
	trimmedHost string,
	dnsLookupCache, authCache cache.SetGetKey,
) []string {
	// Get credentials for a given branch/repo/owner
	targetOwner, targetRepo, targetBranch := dns.GetTargetFromDNS(trimmedHost, mainDomainSuffix, dnsLookupCache)
	var credentials []string
	canonicalLink := false

	// Try to use the given repo on the given branch or the default branch
	log.Debug().Msg("auth preparations, trying to get credentials")
	if targetOpt, works := tryBranch(log, ctx, giteaClient, &upstream.Options{
		TargetOwner:  targetOwner,
		TargetRepo:   targetRepo,
		TargetBranch: targetBranch,
	}, canonicalLink); works {
		credentials = targetOpt.CheckAuth(giteaClient, authCache)
	}

	return credentials
}