/**
 * Check if a string is a valid date.
 *
 * @param {string} dateString - The string to check.
 * @returns {boolean} - True if the string is a valid date, false otherwise.
 */
export function isValidDate(dateString?: string) {
  if (!dateString) {
    return false;
  }
  // Try to create a Date object from the given string
  const date = new Date(dateString);

  // manually check for leap year
  if (date.getMonth() === 1 && date.getDate() === 29) {
    const year = date.getFullYear();
    if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
      return true;
    }
    return false;
  }
  const dateStringParts = dateString.split('-');
  // manually check for month > 12
  if (parseInt(dateStringParts[1], 10) > 12) {
    return false;
  }
  // manually check for day > 31
  if (parseInt(dateStringParts[2], 10) > 31) {
    return false;
  }
  // manually handle february
  if (parseInt(dateStringParts[1], 10) === 2) {
    // manually check for feb 30
    if (parseInt(dateStringParts[2], 10) > 29) {
      return false;
    }
    // manually check for feb 29
    if (parseInt(dateStringParts[2], 10) === 29) {
      const year = parseInt(dateStringParts[0], 10);
      if ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0) {
        return true;
      }
      return false;
    }
  }

  // Check if the date is a valid date
  const isValid = !isNaN(date.getTime());

  return isValid;
}
