package region

import (
	"github.com/gin-gonic/gin"
	nextgenv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	mgmtv1 "github.com/tidbcloud/tidb-management-service/api/spec/tidb_mgmt_service/v1"

	"github.com/tidbcloud/devops/api"
	regionapi "github.com/tidbcloud/devops/api/region"
	ctrl "github.com/tidbcloud/devops/pkg/controller"
)

// RegisterRegionProviderIdentity
//
//	@Id				RegionControllerRegisterRegionProviderIdentity
//	@Description	register a provider identity for a nextgen region
//	@Tags			RegionController
//	@Accept			json
//	@Produce		json
//	@Param			req	body		regionapi.RegisterRegionProviderIdentityRequest	true	"RegisterRegionProviderIdentityRequest"
//	@Success		200	{object}	regionapi.RegisterRegionProviderIdentityResponse
//	@Router			/api/v1/devops/region/regions/provider-identities [post]
func (c *RegionController) RegisterRegionProviderIdentity(ctx *gin.Context) {
	req := &regionapi.RegisterRegionProviderIdentityRequest{}
	if err := ctx.ShouldBindJSON(req); err != nil {
		ctrl.FailWithCode(ctx, err, api.ErrCodeInvalidArgument)
		return
	}

	identity, err := c.coresvc.Mgmt.Region.RegisterRegionProviderIdentity(ctx, &mgmtv1.RegisterRegionProviderIdentityRequest{
		DeployType:        mgmtv1.DeployType_DEPLOY_TYPE_NEXTGEN,
		RegionLogicalName: req.RegionLogicalName,
		RegionProviderIdentity: &nextgenv1.RegionProviderIdentity{
			Identity:  req.Identity,
			IsDefault: req.IsDefault,
		},
	})
	if err != nil {
		ctrl.Fail(ctx, err)
		return
	}

	ctrl.Success(ctx, &regionapi.RegisterRegionProviderIdentityResponse{
		RegionProviderIdentity: RegionConverter{}.RegionProviderIdentityFromPB(identity),
	})
}
