package byocvpcpeering

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.VpcPeeringAllowlistSetting) *schema.ByocVpcPeeringAllowlistSetting {
	out := &schema.ByocVpcPeeringAllowlistSetting{
		Model:        gorm.Model{},
		ClusterID:    setting.GetClusterId(),
		IpAccessList: schema.TrafficFilters{},
	}
	for _, each := range setting.GetIpAccessList() {
		out.IpAccessList.Cidrs = append(out.IpAccessList.Cidrs, schema.TrafficFilter{
			Cidr:        each.GetCidrBlock(),
			Description: each.GetDescription(),
		})
	}
	return out
}

func modelToEn(setting *schema.ByocVpcPeeringAllowlistSetting) *entity.VpcPeeringAllowlistSetting {
	out := &entity.VpcPeeringAllowlistSetting{
		VpcPeeringAllowlistSetting: &globalngv1.VpcPeeringAllowlistSetting{
			ClusterId: setting.ClusterID,
		},
	}
	out.IpAccessList = lo.Map(setting.IpAccessList.Cidrs, func(each schema.TrafficFilter, _ int) *globalngv1.Endpoint_IpAddress {
		return &globalngv1.Endpoint_IpAddress{
			CidrBlock:   each.Cidr,
			Description: each.Description,
		}
	})
	return out
}
