package flattens

import (
	"context"
	"fmt"
	"strconv"

	"github.com/hashicorp/terraform-plugin-framework/types"
	"github.com/hashicorp/terraform-plugin-log/tflog"
)

// Meta flattens []interface{} golang struct to a list of terraform framework types.StringType
func Meta(ctx context.Context, m []interface{}) types.List {
	tflog.Info(ctx, "Start flattenMeta")
	tempSlice := make([]string, 0, len(m))
	for _, item := range m {
		switch d := item.(type) {
		case string:
			tempSlice = append(tempSlice, d)
		case int:
			tempSlice = append(tempSlice, strconv.Itoa(d))
		case int64:
			tempSlice = append(tempSlice, strconv.FormatInt(d, 10))
		case float64:
			tempSlice = append(tempSlice, strconv.FormatInt(int64(d), 10))
		default:
			tempSlice = append(tempSlice, "")
		}
	}

	res, diags := types.ListValueFrom(ctx, types.StringType, tempSlice)
	if diags.HasError() {
		tflog.Error(ctx, fmt.Sprint("Error flattenMeta:", diags))
	}

	tflog.Info(ctx, "End flattenMeta")
	return res
}
