// Copyright 2024 Antrea Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package printers

import (
	"fmt"
	"sort"
)

func GenerateTableElementWithSummary(list []string, maxColumnLength int) string {
	element := ""
	sort.Strings(list)
	for i, ele := range list {
		val := ele
		if i != 0 {
			val = "," + val
		}

		// If we can't show the information in one line, generate a summary.
		summary := fmt.Sprintf(" + %d more...", len(list)-i)
		if len(element)+len(val) > maxColumnLength {
			element += summary
			if len(element) > maxColumnLength {
				newEle := ""
				for i, ele := range list {
					val := ele
					if i != 0 {
						val = "," + val
					}
					if i != 0 && len(newEle)+len(val)+len(summary) > maxColumnLength {
						break
					}
					newEle += val
				}
				newEle += summary
				return newEle
			}
			break
		}
		element += val
	}
	return element
}
