// ─── Interfaces ───
import type { ConsultaBPResp } from "~/types/Cef";

export const useCefSap = () => {
  // ─── State ───────────────────────────────────────────────────
  const modalSap = ref(false);
  const loadingSap = ref(false);
  const sapData = ref<ConsultaBPResp | null>(null);
  const sapError = ref("");

  // ─── Limpiar estado ──────────────────────────────────────────
  const resetSapState = () => {
    sapData.value = null;
    sapError.value = "";
  };

  // ─── Consultar SAP ───────────────────────────────────────────
  const consultarCefSap = async (nit: string) => {
    
    if (!nit) {
      const { swal } = useSweetAlert();
      swal.fire({
        title: "CEF sin NIT",
        text: "Este CEF no tiene un NIT registrado para consultar en SAP.",
        icon: "warning",
      });
      return;
    }

    modalSap.value = true;
    loadingSap.value = true;
    resetSapState();

    try {
      const { data, success, message } = await useApiFetch<any>("/admin/cef", {
        method: "POST",
        body: {
          action: "cef_sap",
          nit,
        },
      });

      console.log(data, success, message)
      if (success && data) {
        const sapResponse = data as any;

        // Verificar si la petición SAP fue exitosa
        if (!sapResponse.sap_success) {
          sapError.value =
            sapResponse.sap_message || "Error de conexión con SAP";
          return;
        }

        // Verificar Messages de SAP: code "1" type "S" = éxito, code "2" type "E" = no encontrado
        const messages = sapResponse.sap_data?.Messages;
        if (messages && messages.code === "2" && messages.type === "E") {
          sapError.value =
            messages.message || "Franquiciado no encontrado en SAP";
          return;
        }

        // Extraer datos del ConsultaBPResp
        const bpData = sapResponse.sap_data?.ConsultaBPResp;
        if (bpData) {
          sapData.value = bpData;
        } else {
          sapError.value = "No se recibieron datos del franquiciado";
        }
      } else {
        sapError.value = message || "Error al consultar SAP";
      }
    } catch (err: any) {
      sapError.value = err.message || "Ocurrió un error inesperado";
    } finally {
      loadingSap.value = false;
    }
  };

  return {
    modalSap,
    loadingSap,
    sapData,
    sapError,
    resetSapState,
    consultarCefSap,
  };
};
