package com.orchard;

import io.confluent.ksql.function.udf.UdfParameter;
import io.confluent.ksql.function.udtf.Udtf;
import io.confluent.ksql.function.udtf.UdtfDescription;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

@UdtfDescription(name = "split_string", description = "Split a string into a list.")
public class SplitStringUdtf {

    private final String DELIMITER = "\\R";

    @Udtf(description = "Splits a string delimited with a delimiter into a list of strings.")
    public List<String> split_string(
            @UdfParameter(value = "input", description = "the given string to split") final String input,
            @UdfParameter(value = "delimiter", description = "regex delimiter") final String delimiter
    ) {
        return Arrays.stream(input.split(delimiter)).map(item -> item.trim()).collect(Collectors.toList());
    }

    @Udtf(description = "Splits a multi-line string into a list of strings.")
    public List<String> split_string(
            @UdfParameter(value = "input", description = "the given string to split") final String input) {
        return split_string(input, DELIMITER);
    }
}
