package query

import (
	"github.com/tidbcloud/aisupport/services/jsm-syncer/internal/integrations/mgmt"
	querysvc "github.com/tidbcloud/aisupport/services/jsm-syncer/internal/services/query"
)

func toUserResponse(user querysvc.User) UserResponse {
	return UserResponse{
		TiDBCloudUserID:    user.TiDBCloudUserID,
		Email:              user.Email,
		AtlassianAccountID: user.AtlassianAccountID,
	}
}

func toOrgUserResponses(users []querysvc.OrgUser) []OrgUserResponse {
	result := make([]OrgUserResponse, 0, len(users))
	for _, user := range users {
		result = append(result, OrgUserResponse{
			ID:           user.ID,
			Email:        user.Email,
			JSMAccountID: user.JSMAccountID,
		})
	}
	return result
}

func toOrgResponses(orgs []querysvc.Org) []OrgResponse {
	result := make([]OrgResponse, 0, len(orgs))
	for _, org := range orgs {
		result = append(result, toOrgResponse(org))
	}
	return result
}

func toOrgResponse(org querysvc.Org) OrgResponse {
	result := OrgResponse{
		TiDBCloudOrgID: org.TiDBCloudOrgID,
		Name:           org.Name,
		Status:         org.Status,
		SupportPlan:    org.SupportPlan,
		Plan:           org.Plan,
		JSMOrgID:       org.JSMOrgID,
		BizRegion:      org.BizRegion,
		TimeZone:       org.TimeZone,
	}
	if org.MSPOrg != nil {
		result.MSPOrg = &MSPOrgResponse{
			TiDBCloudOrgID:         org.MSPOrg.TiDBCloudOrgID,
			Name:                   org.MSPOrg.Name,
			MSPNotificationEnabled: org.MSPOrg.MSPNotificationEnabled,
			MSPMembers:             org.MSPOrg.MSPMembers,
		}
	}
	return result
}

func toLakeResponses(lakes []querysvc.Lake) []LakeResponse {
	result := make([]LakeResponse, 0, len(lakes))
	for _, lake := range lakes {
		result = append(result, LakeResponse{
			ID:             lake.ID,
			Name:           lake.Name,
			Tier:           lake.Tier,
			SupportPlan:    lake.SupportPlan,
			TiDBCloudOrgID: lake.TiDBCloudOrgID,
			Status:         lake.Status,
		})
	}
	return result
}

func toClusterResponses(clusters []mgmt.Cluster) []ClusterResponse {
	result := make([]ClusterResponse, 0, len(clusters))
	for _, cluster := range clusters {
		result = append(result, toClusterResponse(cluster))
	}
	return result
}

func toClusterResponse(cluster mgmt.Cluster) ClusterResponse {
	return ClusterResponse{
		ID:             cluster.ID,
		Name:           cluster.Name,
		Status:         cluster.Status,
		ServicePlan:    cluster.ServicePlan,
		TiDBCloudOrgID: cluster.TiDBCloudOrgID,
	}
}
