package dto

import (
	"strings"

	"github.com/tidbcloud/account/central/utils"
	"github.com/tidbcloud/account/commons/config"
	"github.com/tidbcloud/account/idl/pbgen/proto/account"
	"github.com/tidbcloud/account/internel/dao/entity"
)

func ConvertAccountOrg(org *entity.Tenant) *account.Org {
	// when org created the  TimeZone default '', when user set TimeZone, the TimeZone value is not ''
	TimeZone := "0"
	userSetTimezone := "+00:00"
	if org.TimeZone != "" {
		userSetTimezone = utils.ConvTimezone2NewTimezone(org.TimeZone)
		TimeZone = utils.ConvTimezone2OldTimezone(org.TimeZone)
	}
	return &account.Org{
		Id:                        org.ID.Uint64(),
		CreatedAt:                 utils.ToTimestamp(org.CreatedAt),
		UpdatedAt:                 utils.ToTimestamp(org.UpdatedAt),
		Name:                      org.Name,
		Alias:                     org.Alias,
		Email:                     org.Email,
		Country:                   org.Country,
		TimeZone:                  TimeZone,
		UserSetTimezone:           userSetTimezone,
		Status:                    string(org.Status),
		PocBindedPackageId:        org.POCBindedPackageID,
		OnDemandBindedPackageId:   org.OnDemandBindedPackageID,
		DevTierBindedPackageId:    org.DevTierBindedPackageID,
		Kind:                      string(org.Kind),
		AcceptService:             org.AcceptService,
		ZendeskId:                 org.ZendeskID.Uint64(),
		ThirdPartyAccountProvider: ToString(org.ThirdPartyAccountProvider),
		ThirdPartyAccountCode:     ToString(org.ThirdPartyAccountCode),
		ThirdPartyFreeTrial:       org.ThirdPartyFreeTrial,
		BillingEmail:              org.BillingEmail,
		OrgTag:                    org.OrgTag,
		AccountManager:            "",
		IsMsp:                     org.OrgTag == string(entity.OrgTagMsp),
		IsMspCustomer:             org.OrgTag == string(entity.OrgTagMspCustomer),
		IsCppo:                    org.OrgTag == string(entity.OrgTagAwsCppo),
		IsCppoCustomer:            org.OrgTag == string(entity.OrgTagAwsCppoCustomer),
		IsMcpoPartner:             org.OrgTag == string(entity.PartnerTypeMCPO),
		IsMcpoCustomer:            org.OrgTag == string(entity.OrgTagGcpMCPOCustomer),
		IsResalePartner:           org.OrgTag == string(entity.OrgTagResalePartner),
		IsResaleCustomer:          org.OrgTag == string(entity.OrgTagResaleCustomer),
	}

}

const (
	stressTestUserEmailPrefix = "stress_test_user"
	stressTestUserEmailSuffix = "pingcap.com"
)

func ConvertAccountOrgs(orgs []entity.Tenant) []*account.Org {
	var result []*account.Org

	for _, org := range orgs {
		if config.Global().ServerConfig.StressTest &&
			strings.HasPrefix(org.Email, stressTestUserEmailPrefix) &&
			strings.HasSuffix(org.Email, stressTestUserEmailSuffix) {
			continue
		}
		result = append(result, ConvertAccountOrg(&org))
	}

	return result
}
