use polars_core::prelude::StringChunked;
use polars_core::prelude::arity::unary_elementwise;
use unicode_reverse::reverse_grapheme_clusters_in_place;

fn to_reverse_helper(s: Option<&str>) -> Option<String> {
    s.map(|v| {
        let mut text = v.to_string();
        reverse_grapheme_clusters_in_place(&mut text);
        text
    })
}

pub fn reverse(ca: &StringChunked) -> StringChunked {
    unary_elementwise(ca, to_reverse_helper)
}
