type Casing = 'original' | 'lowercase' | 'uppercase' | 'sentence';

export function changeTextCasing(
  str: string,
  casing: Casing | ((str: string) => string) = 'original',
) {
  if (casing instanceof Function) {
    return casing(str);
  }

  if (casing === 'original' || !str) return str;

  if (casing === 'lowercase') {
    return str.toLowerCase();
  }

  if (casing === 'uppercase') {
    return str.toUpperCase();
  }

  if (casing === 'sentence') {
    const words = str?.split(/[\s-_]+/);
    return words.map((word) => word[0].toUpperCase() + word.slice(1).toLowerCase()).join(' ');
  }
}
