import { clsx, type ClassValue } from 'clsx';
import { twMerge } from 'tailwind-merge';

/**
 * Create a Tailwind class with clsx and tailwind-merge to avoid
 * class conflicts.
 *
 * @param inputs - Tailwind classes to merge.
 *
 * @returns A Tailwind class.
 */
export function cn(...inputs: ClassValue[]) {
  return twMerge(clsx(inputs));
}

/**
 * Convert a string to title case.
 *
 * @param string - The string to convert.
 *
 * @returns A title case string.
 */
export function titleCase(string: string) {
  return string
    .toLowerCase()
    .split(' ')
    .map((word) => word.charAt(0).toUpperCase() + word.slice(1))
    .join(' ');
}

/**
 * Convert a string to a slug.
 *
 * @param pathname - The pathname to append to the URL.
 *
 * @returns The full URL.
 */
export const getURL = (pathname?: string) => {
  let url =
    process.env.NEXT_PUBLIC_SITE_URL ?? // Set this to your site URL in production env.
    process.env.NEXT_PUBLIC_VERCEL_URL ?? // Automatically set by Vercel.
    'http://localhost:3000/';

  // Make sure to include `https://` when not localhost.
  url = url.includes('http') ? url : `https://${url}`;
  // Make sure to including trailing `/`.
  url = url.charAt(url.length - 1) === '/' ? url : `${url}/`;

  if (pathname) {
    // Add pathname without starting `/`
    url += pathname.slice(1);
  }
  return url;
};
