package options

import (
	"fmt"

	"github.com/tidbcloud/pov-service/internal/model"
)

func NewListAuditLogOption() ListOption[RefOption] {
	return ListOption[RefOption]{}
}

func OperatorID(ids ...string) ColumnOption {
	return ColumnOption{
		Column: "operator_id",
		Values: ConvertStringsToInterface(ids),
	}
}

func OperateType(types ...model.OperateType) ColumnOption {
	return ColumnOption{
		Column: "type",
		Values: ConvertStringsToInterface(ConvertOperateTypesToStrings(types)),
	}
}

func ObjectID(ids ...string) ColumnOption {
	return ColumnOption{
		Column: "object_id",
		Values: ConvertStringsToInterface(ids),
	}
}

func OrderByOperateAt(direction OrderDirection) string {
	return fmt.Sprintf("operate_at %s", direction)
}

func ConvertStringsToInterface(s []string) []any {
	interfaceSlice := make([]any, len(s))
	for i, v := range s {
		interfaceSlice[i] = v
	}
	return interfaceSlice
}

func ConvertOperateTypesToStrings(types []model.OperateType) []string {
	stringSlice := make([]string, len(types))
	for i, v := range types {
		stringSlice[i] = string(v)
	}
	return stringSlice
}
