"use server";

export async function getIcal(roomID: number) {
  if (!roomID) {
    console.log("roomID is not set in environment variables");
    return [];
  }

  try {
    const res = await fetch(
      `https://sys-direct.tongosngejang.com/api/villa/calendar?formatted=true&roomId=${roomID}`,
      {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${process.env.TONGOS_API_KEY}`,
        },
        next: {
          revalidate: 60,
        },
      }
    );
    if (!res) {
      throw new Error("Network response was not ok");
    }
    const resData = await res.json();
    return resData;
  } catch (error) {
    console.log("Error getting ical", error);
    return [];
  }
}

export async function getConstruction(id: number) {
  if (!id) {
    console.log("roomID is not set in environment variables");
    return [];
  }

  try {
    const res = await fetch(
      `https://sys-direct.tongosngejang.com/api/properties/construction/${id}`,
      {
        method: "GET",
        headers: {
          "Content-Type": "application/json",
          Authorization: `Bearer ${process.env.NEXT_PUBLIC_TONGOS_API_KEY}`,
        },
        cache: "no-cache",
      }
    );
    if (!res) {
      throw new Error("Network response was not ok");
    }
    const resData = await res.json();
    return resData;
  } catch (error) {
    console.log("Error getting construction", error);
    return [];
  }
}

export async function postAvailability(form: any) {
  
  if (!process.env.TONGOS_API_KEY) {
    console.error("Missing API key");
    throw new Error("API key is not set");
  }

  const formData = {
    start: form.start,
    end: form.end,
    adult: form.adult,
    child: form.child,
  };

  try {
    const response = await fetch(
      "https://sys-direct.tongosngejang.com/api/availability/215727",
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
          Authorization: `Bearer ${process.env.TONGOS_API_KEY}`,
        },
        body: JSON.stringify(formData),
        cache: "no-store",
      }
    );

    if (!response) {
      throw new Error("Network response was not ok");
    }

    const res = await response.json();

    if (res.success) {
      return res;
    } else {
      return {
        success: false,
        message: res.message,
      };
    }
  } catch (error) {
    console.error("Error in postAvailability:", error);
    return {
      data: null,
      success: false,
      message: "Something went wrong, status process booking",
    };
  }
}

export async function postSingleAvailability(id: number, form: any) {
  if (!id) {
    console.log("roomID is not set in environment variables");
    throw new Error("roomID is not set in environment variables");
  }

  if (!process.env.TONGOS_API_KEY) {
    console.error("Missing API key");
    throw new Error("API key is not set");
  }

  const formData = {
    roomId: id,
    start: form.start,
    end: form.end,
    adult: form.adult,
    child: form.child,
  };

  try {
    const response = await fetch(
      "https://sys-direct.tongosngejang.com/api/availability",
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
          Authorization: `Bearer ${process.env.TONGOS_API_KEY}`,
        },
        body: JSON.stringify(formData),
        cache: "no-store",
      }
    );

    if (!response) {
      throw new Error("Network response was not ok");
    }

    const res = await response.json();

    if (res.success) {
      return res;
    } else {
      return {
        success: false,
        message: res.message,
      };
    }
  } catch (error) {
    console.error("Error in postAvailability:", error);
    return {
      data: null,
      success: false,
      message: "Something went wrong, status process booking",
    };
  }
}

export async function postPayment(form: any) {
  if (!form.room_id) {
    console.log("roomID is not set in environment variables");
    throw new Error("roomID is not set in environment variables");
  }

  if (!process.env.TONGOS_API_KEY) {
    console.error("Missing API key");
    throw new Error("API key is not set");
  }

  const mode = process.env.NODE_ENV === "development"; // or however you check it

  const formData = {
    roomId: Number(form.room_id),
    start: form.start,
    end: form.end,
    adult: form.adult,
    child: form.child,
    usd: form.usd,
    idr: form.idr,
    firstname: form.firstname,
    lastname: form.lastname,
    phone: form.phone,
    email: form.email,
    address: form.address,
    message: form.message || "No Message",
    ...(mode ? {test: true} : {}),
  };

  try {
    const response = await fetch(
      "https://sys-direct.tongosngejang.com/api/payment",
      {
        method: "POST",
        headers: {
          "Content-Type": "application/json",
          Accept: "application/json",
          Authorization: `Bearer ${process.env.TONGOS_API_KEY}`,
        },
        body: JSON.stringify(formData),
        cache: "no-store",
      }
    );

    const res = await response.json();

    return res;
  } catch (error: any) {
    console.error("Error processing api payment", error);
    return {
      success: false,
      message: error.message,
    };
  }
}
