"use client";

import { useState, useEffect, useCallback } from "react";
import { useRouter } from "next/navigation";
import { useAuth } from "@/components/onboarding/hooks/useAuth";
import { api } from "@/lib/api-client";
import { resolveFarmerDestination } from "@/lib/farmer-routing";
import { mapDashboardResponse, type DashboardData } from "@/lib/farmer-dashboard";

interface UseFarmerDashboardReturn {
  loading: boolean;
  data: DashboardData | null;
  user: { phone: string } | null;
  error: string | null;
  refresh: () => Promise<void>;
}

export function useFarmerDashboard(): UseFarmerDashboardReturn {
  const router = useRouter();
  const auth = useAuth();
  const [loading, setLoading] = useState(true);
  const [data, setData] = useState<DashboardData | null>(null);
  const [error, setError] = useState<string | null>(null);

  const loadDashboard = useCallback(async () => {
    if (auth.loading) return;

    if (!auth.isAuthenticated) {
      router.replace("/farmers/login");
      return;
    }

    const dest = resolveFarmerDestination(auth);
    if (dest !== "/farmers/dashboard") {
      router.replace(dest);
      return;
    }

    try {
      const payload = await api.farmer.dashboard();
      setData(mapDashboardResponse(payload));
      setError(null);
    } catch (e: any) {
      setError(e.message || "Failed to load dashboard data");
    } finally {
      setLoading(false);
    }
  }, [auth, router]);

  useEffect(() => {
    loadDashboard();
  }, [loadDashboard]);

  return {
    loading: auth.loading || loading,
    data,
    user: auth.user ? { phone: auth.user.phone } : null,
    error,
    refresh: loadDashboard,
  };
}
