import { API_ROUTES } from '@shared/config/routes';
import { TBaseForm } from '@shared/api/api.types';
import { CORE } from '@shared/config/core';

type TRequest = TBaseForm;

const sendFormFn = async ({ ...props }: TRequest) => {
  try {
    const response = await fetch('/api' + API_ROUTES.SEND_FORM, {
      method: 'POST',
      credentials: 'include',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        ...props,
        secure: CORE.MAIL_SECURE_KEY,
      }),
    });

    if (response.ok) {
      return response;
    } else {
      if (response.status === 400) throw new Error(`400 Bad request`);
      if (response.status === 401) throw new Error(`401 Unauthorized`);
      if (response.status === 500) throw new Error('500 Internal server error');

      throw new Error(`${response.status} - Network response failure`);
    }
  } catch (e) {
    console.error(e);
  }
};

export { sendFormFn };
