import { http } from '@/services/api/http'
import { endpoints } from '@/services/api/endpoints'

// Backend (Postman: Auth) is the source of truth. Payloads use the backend's
// field names — `name`, `phone`, `password`, `password_confirmation`,
// `device_name`, `avatar_media_id` — and responses are passed through unchanged.
// Callers (forms / store) are responsible for translating UI-local field names
// (firstName/lastName/phoneNumber) into this shape.

export const apiLogin = (payload) => http.post(endpoints.login, payload)

export const apiRequestLoginOtp = (payload) => http.post(endpoints.requestLoginOtp, payload)

export const apiVerifyLoginOtp = (payload) => http.post(endpoints.verifyLoginOtp, payload)

export const apiRegister = (payload) => http.post(endpoints.register, payload)

export const apiVerifyCode = (payload) => http.post(endpoints.verifyCode, payload)

export const apiResendVerificationCode = (payload) =>
  http.post(endpoints.resendVerificationCodeForRegister, payload)

export const apiForgotPassword = (payload) => http.post(endpoints.forgotPassword, payload)

export const apiVerifyForgotPasswordCode = (payload) =>
  http.post(endpoints.verifyForgotPasswordCode, payload)

export const apiResetPassword = (payload) => http.post(endpoints.resetPassword, payload)

export const apiLogout = () => http.post(endpoints.logout)

export const apiGetMe = () => http.get(endpoints.me)

export const apiCompleteProfile = (payload) => http.post(endpoints.completeProfile, payload)

export const apiUpdateProfile = (payload) => http.patch(endpoints.updateProfile, payload)

// `data` is an array of `{ key, value }` entries. The backend echoes whatever
// we POST back from the GET, so this is effectively a free-form key/value bag.
export const apiGetRegisterData = () => http.get(endpoints.registerData)
export const apiSaveRegisterData = (data) => http.post(endpoints.registerData, { data })

export const apiGetRegistrationQuestionVideo = () =>
  http.get(endpoints.getRegistrationQuestionVideo)

// Media uploads (especially course videos) can legitimately take several
// minutes on slower connections. Keep the normal API timeout short, but give
// this endpoint enough time to complete the backend's 300 MB upload contract.
export const apiUploadMedia = (formData) =>
  http.post(endpoints.uploadMedia, formData, { timeout: 10 * 60 * 1000 })
