package api

import (
	"net/http"

	"github.com/gin-gonic/gin"
	"github.com/pingcap/dbaas/admin/forms"
	"github.com/pingcap/dbaas/admin/models"
	"github.com/pingcap/dbaas/central/config"
	"github.com/pingcap/dbaas/central/db/entity"
	"github.com/pingcap/errcode"
	"github.com/pingcap/errors"
)

func checkSalesforceApiKey(apiKeyEntity *entity.APIKey) error {
	if apiKeyEntity.Name != config.SalesforceApiKeyName || apiKeyEntity.TenantID != entity.PingCAPTenantID {
		return errcode.NewNotAuthenticatedErr(errors.New("invalid api key"))
	}
	return nil
}

func UpdateOrganizationPocStatus(c *gin.Context) {
	ctx := c.Request.Context()
	apiKey, err := GetAPIKey(c)
	if err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}

	if err := checkSalesforceApiKey(apiKey); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}

	reqUri := forms.GetOrgIDReq{}
	if err := c.ShouldBindUri(&reqUri); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}

	req := forms.UpdateOrgPocStatusReq{}
	if err := c.ShouldBindJSON(&req); err != nil {
		Fail(c, err, http.StatusBadRequest)
		return
	}
	req.OrgID = reqUri.OrgID

	model := models.GetAdminModel()
	err = model.UpdateOrganizationPocStatus(ctx, req)
	if err != nil {
		Fail(c, err, http.StatusInternalServerError)
		return
	}

	Success(c, nil, http.StatusOK)
}
