package publicconnectionsetting

import (
	"github.com/samber/lo"
	"gorm.io/gorm"

	globalngv1 "github.com/tidbcloud/tidb-management-service/api/spec/global/nextgen/v1"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/domain/entity"
	"github.com/tidbcloud/tidb-management-service/nextgen-global-service/infra/repoimpl/schema"
)

func enToModel(setting *entity.PublicConnectionSetting) *schema.PublicConnectionSetting {
	out := &schema.PublicConnectionSetting{
		Model:           gorm.Model{},
		ClusterId:       setting.ClusterId,
		TidbGroupId:     setting.TidbGroupId,
		DisablePublicLB: !setting.GetEnable(),
		Cidr:            schema.TrafficFilters{},
	}
	for _, each := range setting.IpAllowList {
		out.Cidr.Cidrs = append(out.Cidr.Cidrs, schema.TrafficFilter{
			Cidr:        each.CidrBlock,
			Description: each.Description,
		})
	}
	return out
}

func modelToEn(setting *schema.PublicConnectionSetting) *entity.PublicConnectionSetting {
	out := &entity.PublicConnectionSetting{
		PublicConnectionSetting: &globalngv1.PublicConnectionSetting{
			ClusterId:   setting.ClusterId,
			TidbGroupId: setting.TidbGroupId,
			Enable:      lo.ToPtr(!setting.DisablePublicLB),
		},
	}
	for _, each := range setting.Cidr.Cidrs {
		out.IpAllowList = append(out.IpAllowList, &globalngv1.Endpoint_IpAddress{
			CidrBlock:   each.Cidr,
			Description: each.Description,
		})
	}
	return out
}
