import { useQuery, useMutation } from "@tanstack/react-query";
import type { OptionalBOF2Constants } from "../../../types/types";

const fetchOptionalConstants = async (format: string) => {
  if (!format || format === "json") return null;
  const response = await fetch(`http://100.115.148.59/api/fetch-config?id=Dispatcher0-${format}-constants`);
  if (!response.ok) {
    throw new Error("Network response was not ok");
  }
  return response.json();
};

const postOptionalConstants = async (config: OptionalBOF2Constants) => {
  const fields = [
    {
      property: "propSourceIdentifier",
      value: config?.SCID,
    },
    {
      property: "propTimeZoneType",
      value: config?.timestampSource,
    },
    {
      property: "propGpsFormat",
      value: config?.GPSFormat,
    },
  ];

  if (config.FFID) {
    fields.push({
      property: "propFeedIdentifier",
      value: config.FFID,
    });
  }
  const updateConfigPayload = {
    id: `Dispatcher0-${config.format?.toLowerCase()}-constants`,
    fields: fields,
  };

  const response = await fetch(`http://100.115.148.59/api/update-config`, {
    method: "POST",
    body: JSON.stringify(updateConfigPayload),
  });
  if (!response.ok) {
    throw new Error("Network response was not ok");
  }
  return response.json();
};

export const useOptionalConstants = (format: string) => {
  const optionalConstantsQuery = useQuery({
    queryKey: ["optionalConstants", format],
    queryFn: () => fetchOptionalConstants(format),
    enabled: !!format && format !== "json",
  });

  const optionalConstantsMutation = useMutation({
    mutationKey: ["postOptionalConstants"],
    mutationFn: postOptionalConstants,
  });
  return { optionalConstantsQuery, optionalConstantsMutation };
};
