import { create } from "zustand";
import { isDesktop } from "@/lib/platform";
import { listen } from "@tauri-apps/api/event";
import { setupTrafficStatsListener, TrafficStatsResponse } from "vpn-plugin";

interface TrafficState {
  rx: number;
  tx: number;
  _unlisten: (() => void) | null;

  // Инициализация слушателя
  init: () => Promise<void>;
  // Сброс счетчиков (например, при смене сервера)
  reset: () => void;
}

export const useTrafficStore = create<TrafficState>((set, get) => ({
  rx: 0,
  tx: 0,
  _unlisten: null,

  reset: () => set({ rx: 0, tx: 0 }),

  init: async () => {
    // Если уже слушаем — ничего не делаем
    if (get()._unlisten) return;

    try {
      let unlistenFn: () => void;

      if (isDesktop) {
        console.log("--- [STATS] Инициализация Windows (Global Listen)");
        // На десктопе слушаем через основной эмиттер Tauri
        const unlisten = await listen<TrafficStatsResponse>(
          "traffic-stats",
          (event) => {
            set({
              rx: event.payload.rxBytes,
              tx: event.payload.txBytes,
            });
          },
        );
        unlistenFn = unlisten;
      } else {
        console.log("--- [STATS] Инициализация Mobile (Plugin Listener)");
        // На мобилках используем твой setupTrafficStatsListener из плагина
        const listener = await setupTrafficStatsListener((stats: any) => {
          // Обрабатываем возможную разницу в структуре payload Tauri v2
          const data = stats?.payload || stats;
          set({
            rx: data.rxBytes || 0,
            tx: data.txBytes || 0,
          });
        });
        unlistenFn = () => listener.unregister();
      }

      set({ _unlisten: unlistenFn });
    } catch (e) {
      console.error("Traffic stats init error:", e);
    }
  },
}));
