import { useQuery, useQueryClient } from "@tanstack/react-query";
import { supabase } from "@/integrations/supabase/client";

export type AppSettings = {
  payments_enabled: boolean;
  ai_scan_free: boolean;
  ai_scan_price_ngn: number;
};

const defaults: AppSettings = { payments_enabled: false, ai_scan_free: true, ai_scan_price_ngn: 5000 };

export function useAppSettings() {
  const query = useQuery({
    queryKey: ["app-settings"],
    queryFn: async () => {
      const { data, error } = await supabase.from("app_settings").select("key,value");
      if (error) throw error;
      const map = { ...defaults } as Record<string, unknown>;
      for (const row of data ?? []) map[row.key] = row.value;
      return map as unknown as AppSettings;
    },
  });
  return { settings: query.data ?? defaults, loading: query.isLoading };
}

export function useUpdateSetting() {
  const qc = useQueryClient();
  return async (key: keyof AppSettings, value: boolean | number) => {
    const { error } = await supabase.from("app_settings").upsert({ key, value }, { onConflict: "key" });
    if (error) throw error;
    await qc.invalidateQueries({ queryKey: ["app-settings"] });
  };
}

/** AI mold checks are chargeable only when payments are on and free mode is off. */
export function scanRequiresPayment(settings: AppSettings) {
  return settings.payments_enabled && !settings.ai_scan_free;
}