import axios from "axios";
import AsyncStorage from "@react-native-async-storage/async-storage";
import {
  ActivationParams,
  LoginParams,
  RegistrationParams,
} from "../../interfaces/Interfaces";

let debug = true;
export let backendURL = "";
if (debug) {
  backendURL = "http://10.0.10.8:8000";
} else {
  backendURL = "https://keannu125.pythonanywhere.com";
}

const instance = axios.create({
  baseURL: backendURL,
  timeout: 1000,
});

// App APIs

// User APIs

export function UserRegister(register: RegistrationParams) {
  console.log(JSON.stringify(register));
  return instance
    .post("/api/v1/accounts/users/", register)
    .then(async (response) => {
      return [response.status];
    })
    .catch((error) => {
      return [error.response.status, error.response.data];
    });
}

export function UserLogin(user: LoginParams) {
  return instance
    .post("/api/v1/accounts/token/login/", user)
    .then(async (response) => {
      AsyncStorage.setItem("token", JSON.stringify(response.data.auth_token));
      return [true];
    })
    .catch((error) => {
      console.log(
        "Login Failed: " + error.response.status + " " + error.response.data
      );
      return [false, error.response.data];
    });
}

export async function UserInfo() {
  const token = JSON.parse((await AsyncStorage.getItem("token")) || "{}");
  return instance
    .get("/api/v1/accounts/users/me/", {
      headers: {
        Authorization: "Token " + token,
      },
    })
    .then((response) => {
      return response.data;
    });
}

export function UserActivate(activation: ActivationParams) {
  return instance
    .post("/api/v1/accounts/users/activation/", activation)
    .then(async (response) => {
      return true;
    })
    .catch((error) => {
      return false;
    });
}
