import {
  deleteJSON,
  getJSON,
  postJSON,
  putJSON,
} from '../../../infrastructure/fetch-json'
import { executeV2Captcha } from './captcha'

export function sendInvite(project, email, privileges) {
  return executeV2Captcha(
    window.ExposedSettings.recaptchaDisabled?.invite
  ).then(grecaptchaResponse => {
    return postJSON(`/project/${project._id}/invite`, {
      body: {
        email, // TODO: normalisedEmail?
        privileges,
        'g-recaptcha-response': grecaptchaResponse,
      },
    })
  })
}

export function resendInvite(project, invite) {
  return postJSON(`/project/${project._id}/invite/${invite._id}/resend`)
}

export function revokeInvite(project, invite) {
  return deleteJSON(`/project/${project._id}/invite/${invite._id}`)
}

export function updateMember(project, member, data) {
  return putJSON(`/project/${project._id}/users/${member._id}`, {
    body: data,
  })
}

export function removeMemberFromProject(project, member) {
  return deleteJSON(`/project/${project._id}/users/${member._id}`)
}

export function transferProjectOwnership(project, member) {
  return postJSON(`/project/${project._id}/transfer-ownership`, {
    body: {
      user_id: member._id,
    },
  })
}

export function setProjectAccessLevel(project, publicAccessLevel) {
  return postJSON(`/project/${project._id}/settings/admin`, {
    body: { publicAccessLevel },
  })
}

// export function updateProjectAdminSettings(project, data) {
//   return postJSON(`/project/${project._id}/settings/admin`, {
//     body: data
//   })
// }

export function listProjectMembers(project) {
  return getJSON(`/project/${project._id}/members`)
}

export function listProjectInvites(project) {
  return getJSON(`/project/${project._id}/invites`)
}
