export const launchNameValidator = (_: unknown, value: string): Promise<void> => {
  if (!value) {
    return Promise.reject(new Error('Please Enter Launch Name'));
  }
  if (!/^[A-Za-z0-9 ]*$/.test(value)) {
    return Promise.reject(new Error('Please Enter Alphanumeric Only'));
  }
  if (value.length > 50) {
    return Promise.reject(new Error('Maximum 50 Characters Allowed'));
  }
  if (value.length < 2) {
    return Promise.reject(new Error('Minimum 2 Characters Required'));
  }
  if (value.trim() !== value || value.includes('  ')) {
    return Promise.reject(new Error('Only Single Spaces Allowed In Between Words'));
  }
  return Promise.resolve();
};

export const launchLocationValidator =
(required: boolean = true) =>
(_: unknown, value: string): Promise<void> => {
    if (required) {
      if (!value) {
        return Promise.reject(new Error('Please Enter Location'));
      }
    }
    if (value) {
      if (!/^[A-Za-z0-9 ]*$/.test(value)) {
        return Promise.reject(new Error('Please Enter Alphanumeric Only'));
      }
      if (value.length > 100) {
        return Promise.reject(new Error('Maximum 100 Characters Allowed'));
      }
      if (value.length < 2) {
        return Promise.reject(new Error('Minimum 2 Characters Required'));
      }
      if (value.trim() !== value || value.includes('  ')) {
        return Promise.reject(new Error('Only Single Spaces Allowed In Between Words'));
      }
    }

    return Promise.resolve();
  };

export const fieldSalesInputValidator = (_: unknown, value: string): Promise<void> => {
  if (!value) {
    return Promise.reject(new Error('Please Enter a Lead'));
  }
  if (!/^[0-9]*$/.test(value)) {
    return Promise.reject(new Error('Please Enter Numeric Value Only'));
  }
  if (value.length > 2) {
    return Promise.reject(new Error('Maximum 2 Digits Allowed'));
  }
  return Promise.resolve();
};

export const preSalesInputValidator = (_: unknown, value: string): Promise<void> => {
  if (!/^[0-9]*$/.test(value)) {
    return Promise.reject(new Error('Please Enter Numeric Value Only'));
  }
  if (value.length > 2) {
    return Promise.reject(new Error('Maximum 2 Digits Allowed'));
  }
  return Promise.resolve();
};

export const projectNameValidator = (_: unknown, value: string): Promise<void> => {
  if (!value) {
    return Promise.reject(new Error('Please Enter Project Name'));
  }
  if (!/^[A-Za-z0-9 ]*$/.test(value)) {
    return Promise.reject(new Error('Please Enter Alphanumeric Only'));
  }
  if (value.length > 50) {
    return Promise.reject(new Error('Maximum 50 Characters Allowed'));
  }
  if (value.length < 2) {
    return Promise.reject(new Error('Minimum 2 Characters Required'));
  }
  if (value.trim() !== value || value.includes('  ')) {
    return Promise.reject(new Error('Only Single Spaces Allowed In Between Words'));
  }
  return Promise.resolve();
};
