"use client"; import { useEffect, useState, useCallback } from "react"; import axios from "axios"; import { ApiServerBaseUrl } from "@/utils/baseurl.utils"; import { getSocialAuthStatus } from "@/utils/commonFunction.utils"; import { useRouter } from "next/navigation"; const ONE_HOUR = 3600; const AutomationPage = () => { const router = useRouter(); const [limit, setLimit] = useState(20); const [loading, setLoading] = useState(false); const [lastRun, setLastRun] = useState(""); const [nextRunIn, setNextRunIn] = useState(ONE_HOUR); /* ------------------------------------------------------------ Validate payment + social login ------------------------------------------------------------ */ useEffect(() => { async function validate() { const userEmail = localStorage.getItem("user_email"); if (!userEmail) { router.push("/social-media-connect"); return; } const storedUser = localStorage.getItem("userDetails"); if (!storedUser) { router.push("/social-media-connect"); return; } const user = JSON.parse(storedUser); const role = user?.role; // ✅ CUSTOMER → pricing check FIRST if (role === "customer") { const session = localStorage.getItem("payment_session"); if (!session) { router.push("/pricing"); return; } } // ✅ ALL ROLES → social media connect check const res = await getSocialAuthStatus(userEmail); if (!res?.connected) { router.push("/social-media-connect"); return; } } validate(); }, [router]); /* ------------------------------------------------------------ Auto Reply Function (wrapped in useCallback) ------------------------------------------------------------ */ const triggerAutoReply = useCallback(async () => { if (!limit || limit <= 0) { alert("Please enter a valid limit number"); return; } try { setLoading(true); await axios.post( `${ApiServerBaseUrl}/social/automation/auto-reply?userId=${localStorage.getItem("user_email")}`, { limit } ); const now = new Date().toLocaleString(); setLastRun(now); const nextTime = Date.now() + ONE_HOUR * 1000; localStorage.setItem("nextRunTimestamp", nextTime.toString()); setNextRunIn(ONE_HOUR); } catch (error: any) { alert(error.response?.data?.message || "Auto reply failed"); } finally { setLoading(false); } }, [limit]); /* ------------------------------------------------------------ Load saved next run or trigger if expired ------------------------------------------------------------ */ useEffect(() => { const savedTime = localStorage.getItem("nextRunTimestamp"); if (savedTime) { const diff = Math.floor((Number(savedTime) - Date.now()) / 1000); if (diff > 0) { setNextRunIn(diff); } else { triggerAutoReply(); } } else { const nextTime = Date.now() + ONE_HOUR * 1000; localStorage.setItem("nextRunTimestamp", nextTime.toString()); } }, [triggerAutoReply]); /* ------------------------------------------------------------ Countdown timer ------------------------------------------------------------ */ useEffect(() => { const timer = setInterval(() => { setNextRunIn((prev) => { if (prev <= 1) { triggerAutoReply(); return ONE_HOUR; } return prev - 1; }); }, 1000); return () => clearInterval(timer); }, [triggerAutoReply]); const formatTime = (sec: number) => { const m = Math.floor(sec / 60); const s = sec % 60; return `${m}m ${s < 10 ? "0" + s : s}s`; }; return (
{/* Floating background bubbles */}

Instagram Auto Reply

setLimit(Number(e.target.value))} />

* This tool uses the `instagram_manage_comments` permission to fetch your recent posts' comments and apply pre-configured automated responses.

{lastRun && (

Last executed: {lastRun}

)}

⏳ Next auto-run in:{" "} {formatTime(nextRunIn)}

Auto reply runs automatically every 1 hour.

); }; export default AutomationPage;