import { useCallback, useEffect, useState } from "react";
import {
  type ReferralData,
  clearReferral,
  getReferral,
  isValidEthereumAddress,
  saveReferral,
} from "../lib/storage";

interface UseReferralStorageReturn {
  referral: ReferralData | null;
  address: string | null;
  setReferral: (address: string) => void;
  clearReferral: () => void;
  isValid: (address: string) => boolean;
}

export function useReferralStorage(): UseReferralStorageReturn {
  const [referral, setReferralState] = useState<ReferralData | null>(null);

  useEffect(() => {
    // Load initial referral from storage
    const stored = getReferral();
    setReferralState(stored);
  }, []);

  const setReferral = useCallback((address: string) => {
    if (isValidEthereumAddress(address)) {
      saveReferral(address);
      setReferralState(getReferral());
    }
  }, []);

  const clearReferralCallback = useCallback(() => {
    clearReferral();
    setReferralState(null);
  }, []);

  return {
    referral,
    address: referral?.address || null,
    setReferral,
    clearReferral: clearReferralCallback,
    isValid: isValidEthereumAddress,
  };
}

Graph