import { ref } from "vue";

export interface Franquiciado {
  id: number;
  cef: string;
  nit: string;
  horario_desde: string;
  horario_hasta: string;
  estado: string;
  latitud: string;
  longitud: string;
  departamento_id: number | string;
  municipio_id: number | string;
  nombre_encargado?: string;
  direccion?: string;
  telefono?: string;
}

const loading = ref(false);
const error = ref<string | null>(null);
const franquiciados = ref<Franquiciado[]>([]);

export const useFranquiciado = () => {

  const listarFranquiciados = async () => {
    loading.value = true;
    error.value = null;
    try {
      const { data, success, message } = await useApiFetch<Franquiciado[]>("admin/cef", { 
        method: "POST", 
        body: { action: "franquiciados" }
      });
      if (success && data) {
        franquiciados.value = data;
      } else {
        throw new Error(message || "Error al listar franquiciados");
      }
    } catch (err: any) {
      error.value = err.message || "Error al listar franquiciados";
      throw err;
    } finally {
      loading.value = false;
    }
  };

  const crearFranquiciado = async (payload: Omit<Franquiciado, "id">) => {
    loading.value = true;
    try {
      const { data, success, message } = await useApiFetch<Franquiciado>("admin/cef", { 
        method: "POST", 
        body: { action: "store_franquiciado", ...payload }
      });

      if (success) {
        if (data) {
          franquiciados.value.unshift(data);
        }
        return { success: true, message: message || "Franquiciado creado correctamente" };
      }
      throw new Error(message || "Error al crear franquiciado");
    } catch (err: any) {
      return { success: false, message: err.message || "Error al crear" };
    } finally {
      loading.value = false;
    }
  };

  const editarFranquiciado = async (payload: Franquiciado) => {
    loading.value = true;
    try {
      const { data, success, message } = await useApiFetch<Franquiciado>("admin/cef", { 
        method: "POST", 
        body: { action: "update_franquiciado", ...payload }
      });

      if (success) {
        const index = franquiciados.value.findIndex(f => f.id === payload.id);
        if (index !== -1 && data) {
          franquiciados.value[index] = data;
        }
        return { success: true, message: message || "Franquiciado actualizado correctamente" };
      }
      throw new Error(message || "Error al actualizar");
    } catch (err: any) {
      return { success: false, message: err.message || "Error al editar" };
    } finally {
      loading.value = false;
    }
  };

  const eliminarFranquiciado = async (id: number) => {
    loading.value = true;
    try {
      const { success, message } = await useApiFetch<any>("admin/cef", { 
        method: "POST", 
        body: { action: "delete_franquiciado", id }
      });

      if (success) {
        franquiciados.value = franquiciados.value.filter(f => f.id !== id);
        return { success: true, message: message || "Franquiciado eliminado correctamente" };
      }
      throw new Error(message || "Error al eliminar");
    } catch (err: any) {
      return { success: false, message: err.message || "Error al eliminar" };
    } finally {
      loading.value = false;
    }
  };

  return {
    loading,
    error,
    franquiciados,
    listarFranquiciados,
    crearFranquiciado,
    editarFranquiciado,
    eliminarFranquiciado,
  };
};
