import { makeRequest } from "@frontend/kitui";


import type {
  LoginRequest,
  LoginResponse,
  RegisterRequest,
  RegisterResponse,
} from "@frontend/kitui";
import { parseAxiosError } from "../utils/parse-error";

const apiUrl =
  process.env.NODE_ENV === "production"
    ? "/auth"
    : "https://squiz.pena.digital/auth";

export async function register(
  login: string,
  password: string,
  phoneNumber: string
): Promise<[RegisterResponse | null, string?]> {
  try {
    const registerResponse = await makeRequest<
      RegisterRequest,
      RegisterResponse
    >({
      url: apiUrl + "/register",
      body: { login, password, phoneNumber },
      useToken: false,
      withCredentials: true,
    });

    return [registerResponse];
  } catch (nativeError) {
    const [error] = parseAxiosError(nativeError);

    return [null, `Не удалось зарегестрировать аккаунт. ${error}`];
  }
}

export async function login(
  login: string,
  password: string
): Promise<[LoginResponse | null, string?]> {
  try {
    const loginResponse = await makeRequest<LoginRequest, LoginResponse>({
      url: apiUrl + "/login",
      body: { login, password },
      useToken: false,
      withCredentials: true,
    });

    return [loginResponse];
  } catch (nativeError) {
    const [error] = parseAxiosError(nativeError);

    return [null, `Не удалось войти. ${error}`];
  }
}

export async function logout(): Promise<[unknown, string?]> {
  try {
    const logoutResponse = await makeRequest<never, void>({
      url: apiUrl + "/logout",
      method: "POST",
      useToken: true,
      withCredentials: true,
    });

    return [logoutResponse];
  } catch (nativeError) {
    const [error] = parseAxiosError(nativeError);

    return [null, `Не удалось выйти. ${error}`];
  }
}
