// components/main/settingsPageComponents/handlers/handleSubmit.ts
import handleReboot from "./handleReboot";

interface OriginalValues {
  name: string;
  ip: string;
  subnet: string;
  gateway: string;
  ntp1: string;
  ntp2: string;
  ntp3: string;
  ntpTimezone: string;
  active: boolean;
}

interface CurrentValues {
  name: string;
  ip: string;
  subnet: string;
  gateway: string;
  ntp1: string;
  ntp2: string;
  ntp3: string;
  ntpTimezone: string;
  active: boolean;
}

const handleSubmit = (
  originalValues: OriginalValues,
  currentValues: CurrentValues
): void => {
  const changes: { [key: string]: string | boolean } = {};
  let networkChanges = false;
  let newIp: string | null = null;

  // Überprüfe, welche Werte sich geändert haben
  if (currentValues.name !== originalValues.name) {
    changes.SNNA = currentValues.name;
    networkChanges = true;
  }
  if (currentValues.ip !== originalValues.ip) {
    changes.SEI01 = currentValues.ip;
    newIp = currentValues.ip; // Neue IP speichern
    networkChanges = true;
  }
  if (currentValues.subnet !== originalValues.subnet) {
    changes.SEI02 = currentValues.subnet;
    networkChanges = true;
  }
  if (currentValues.gateway !== originalValues.gateway) {
    changes.SEI03 = currentValues.gateway;
    networkChanges = true;
  }
  if (currentValues.ntp1 !== originalValues.ntp1) {
    changes.SNIP1 = currentValues.ntp1;
  }
  if (currentValues.ntp2 !== originalValues.ntp2) {
    changes.SNIP2 = currentValues.ntp2;
  }
  if (currentValues.ntp3 !== originalValues.ntp3) {
    changes.SNIP3 = currentValues.ntp3;
  }
  if (currentValues.ntpTimezone !== originalValues.ntpTimezone) {
    changes.SNTZ = currentValues.ntpTimezone;
  }
  if (currentValues.active !== originalValues.active) {
    changes.SNAC = currentValues.active;
  }

  if (Object.keys(changes).length > 0) {
    // URL für die Änderungen erstellen
    let url = `${window.location.origin}/CPL?${window.location.pathname}`;
    Object.keys(changes).forEach((paramKey) => {
      url += `&${paramKey}=${encodeURIComponent(String(changes[paramKey]))}`;
    });

    console.log(url);

    fetch(url, { method: "GET" })
      .then(() => {
        alert("Daten erfolgreich gesendet!");
        if (networkChanges) {
          alert(
            "Hinweis: Die Änderungen in CPL-Name und den Netzwerkeinstellungen werden erst nach einem Neustart des CPL wirksam."
          );
          handleReboot(newIp); // handleReboot mit neuer IP aufrufen
        }
      })
      .catch((error) => {
        console.error("Fehler beim Senden der Daten:", error);
        alert("Fehler beim Senden der Daten.");
      });
  } else {
    alert("Keine Änderungen vorgenommen.");
  }
};

export default handleSubmit;
