// Copyright 2023 The forgejo Authors. All rights reserved.
// SPDX-License-Identifier: MIT

package context

import (
	"net/http"

	repo_model "code.gitea.io/gitea/models/repo"
	"code.gitea.io/gitea/modules/context"
	"code.gitea.io/gitea/modules/log"
)

// RepositoryIDAssignmentAPI returns a middleware to handle context-repo assignment for api routes
func RepositoryIDAssignmentAPI() func(ctx *context.APIContext) {
	return func(ctx *context.APIContext) {
		// TODO: enough validation for security?
		repositoryID := ctx.ParamsInt64(":repository-id")

		log.Info("RepositoryIDAssignmentAPI: %v", repositoryID)

		//TODO: check auth here ?
		//if !ctx.Repo.HasAccess() && !ctx.IsUserSiteAdmin() {
		//	ctx.Error(http.StatusForbidden, "reqAnyRepoReader", "user should have any permission to read repository or permissions of site admin")
		//	return
		//}

		var err error
		repository := new(context.Repository)
		// TODO: does repository struct need more infos?
		repository.Repository, err = repo_model.GetRepositoryByID(ctx, repositoryID)

		// TODO: check & convert errors
		if err != nil {
			ctx.Error(http.StatusInternalServerError, "GetRepositoryByID", err)
		}
		ctx.Repo = repository
	}
}