import { API_BASE_URL } from "@/service/api-config";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { apiFileDelete, apiFileUpload } from "./api-client/api-file";

export async function uploadFileService({
  dirId,
  imageUri: fileUri,
}: {
  dirId: string;
  imageUri: string | null;
}) {
  const token = await AsyncStorage.getItem("authToken");
  const url = `${API_BASE_URL}/mobile/file`;

  console.log("url >>", url);

  if (!fileUri) {
    throw new Error("Harap pilih gambar terlebih dahulu");
  }

  try {
    const uri = fileUri;
    const filename = uri.split("/").pop();
    const match = /\.(\w+)$/.exec(filename || "");
    const type = match ? `image/${match[1]}` : "image";

    const formData = new FormData();
    // @ts-ignore: React Native tidak mengenal Blob secara langsung
    formData.append("file", {
      uri,
      name: filename,
      type,
    });
    formData.append("dirId", dirId);

    const response = await apiFileUpload({
      token: token as string,
      formData,
    });

    console.log("Response upload file >>", JSON.stringify(response, null, 2));

    if (!response.success) {
      throw new Error(response.message);
    }

    return response;
  } catch (error) {
    throw error;
  }
}

export async function deleteFileService({ id }: { id: string }) {
  const token = await AsyncStorage.getItem("authToken");

  try {
    const response = await apiFileDelete({
      id: id,
      token: token as string,
    });

    return response;
  } catch (error) {
    throw error;
  }
}
