package admin

import (
	"github.com/gin-gonic/gin"

	"github.com/tidbcloud/aisupport/services/jsm-syncer/internal/services/accountresolver"
)

func (h *Handler) ResolveMissingAtlassianAccountIDs(c *gin.Context) {
	result, err := h.accountResolver.ResolveMissingAccountIDs(
		c,
		accountresolver.ResolveMissingAccountIDsParams{},
	)
	if err != nil {
		fail(c, err)
		return
	}

	success(c, &ResolveMissingAtlassianAccountIDsResponse{
		Scanned:  result.Scanned,
		Resolved: result.Resolved,
		NotFound: result.NotFound,
	})
}

func (h *Handler) ReconcileUser(c *gin.Context) {
	result, err := h.atlassianSync.SyncUserAccessForAdmin(c, c.Param("tidbcloud_user_id"))
	if err != nil {
		fail(c, err)
		return
	}

	success(c, &ReconcileUserResponse{
		TiDBCloudUserID:       result.TiDBCloudUserID,
		AtlassianAccountFound: result.AtlassianAccountFound,
		OrgMembershipsAdded:   result.OrgMembershipsAdded,
		OrgMembershipsRemoved: result.OrgMembershipsRemoved,
		OrgMembershipsSkipped: result.OrgMembershipsSkipped,
		TechnicalRoleDesired:  result.TechnicalRoleDesired,
		TechnicalRoleChanged:  result.TechnicalRoleChanged,
		LakeRoleDesired:       result.LakeRoleDesired,
		LakeRoleChanged:       result.LakeRoleChanged,
	})
}

func (h *Handler) ReconcileOrg(c *gin.Context) {
	result, err := h.atlassianSync.EnsureOrganization(c, c.Param("tidbcloud_org_id"), true)
	if err != nil {
		fail(c, err)
		return
	}

	success(c, &ReconcileOrgResponse{
		TiDBCloudOrgID:      result.TiDBCloudOrgID,
		JSMOrgID:            result.JSMOrgID,
		OrganizationEnsured: result.OrganizationEnsured,
	})
}
