// Copyright 2019 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.

package frontend

import (
	"context"

	"golang.org/x/pkgsite/internal"
	"golang.org/x/pkgsite/internal/log"
	"golang.org/x/pkgsite/internal/middleware"
)

// GetLatestInfo returns various pieces of information about the latest
// versions of a unit and module:
//   - The linkable form of the minor version of the unit.
//   - The latest module path and the full unit path of any major version found given the
//     fullPath and the modulePath.
//
// It returns empty strings on error.
// It is intended to be used as an argument to middleware.LatestVersions.
func (s *Server) GetLatestInfo(ctx context.Context, unitPath, modulePath string, latestUnitMeta *internal.UnitMeta) internal.LatestInfo {
	defer middleware.ElapsedStat(ctx, "GetLatestInfo")()

	// It is okay to use a different DataSource (DB connection) than the rest of the
	// request, because this makes self-contained calls on the DB.
	ds := s.getDataSource(ctx)

	latest, err := ds.GetLatestInfo(ctx, unitPath, modulePath, latestUnitMeta)
	if err != nil {
		log.Errorf(ctx, "Server.GetLatestInfo: %v", err)
	} else {
		latest.MinorVersion = linkVersion(latest.MinorModulePath, latest.MinorVersion, latest.MinorVersion)
	}
	return latest
}
