"use client"; import { formatCreatedAtWithEnd, showMessage } from "@/utils/commonFunction.utils"; import axios from "axios"; import { useRouter } from "next/navigation"; import React, { useEffect, useState } from "react"; import EditProfileModal from "@/components/account/EditProfileModal"; export default function AccountPage() { const router = useRouter(); const [userId, setUserId] = useState(null); const [user, setUser] = useState(null); const [payment, setPayment] = useState(null); const [loading, setLoading] = useState(false); const [editModalOpen, setEditModalOpen] = useState(false); const [role, setRole] = useState() const [userDetails, setUserDetails] = useState({}); const defaultParams = { userid: user?.userid || userId, name: user?.name || "", email: user?.email || "", phonenumber: user?.phonenumber || "", // ✅ Role is taken from login payload (localStorage), not editable // role: storedRole || user?.role || "", // companyname: user?.companyname || "", }; const [params, setParams] = useState({ ...defaultParams }); const fetchUsers = async () => { try { const uid = localStorage.getItem("data4auto_uid"); const res: any = await axios.get(`https://ebay.backend.data4autos.com/api/motorstate/auth/users/${uid}`); setUserDetails(res.data?.user || []); console.log("user", res.data?.user) } catch (err) { console.error(err); showMessage('Failed to load users', 'error'); } }; useEffect(() => { fetchUsers(); }, []); // ✅ Update params when userDetails are loaded useEffect(() => { if (userDetails && Object.keys(userDetails).length > 0) { setParams({ userid: userDetails.userid || "", name: userDetails.name || "", email: userDetails.email || "", phonenumber: userDetails.phonenumber || "", }); } }, [userDetails]); // ✅ Fetch payment details useEffect(() => { const Role: any = localStorage.getItem("user_role"); setRole(Role) const sessionId = localStorage.getItem("payment_session"); if (Role === "admin" || Role === "partner") return; if (!sessionId) { router.push("/pricing"); return; } const fetchPaymentDetails = async () => { try { const res: any = await axios.get( "https://ebay.backend.data4autos.com/api/payment/details", { params: { session_id: sessionId } } ); setPayment(res.data.payment); } catch (err) { console.error("Error fetching payment details:", err); } }; fetchPaymentDetails(); }, [router]); // ✅ Check authentication useEffect(() => { const uid = localStorage.getItem("data4auto_uid"); const email = localStorage.getItem("d4a_email"); if (uid && email) { setUserId(uid); setUser(email); } else { axios .get("https://ebay.backend.data4autos.com/api/auth/protected", { withCredentials: true, }) .then((res: any) => { const userData = res.data.user; if (userData) { setUser(userData.email); setUserId(userData.userid); localStorage.setItem("data4auto_uid", userData.userid); localStorage.setItem("d4a_email", userData.email); } }) .catch(() => { router.push("/login"); }); } }, [router]); const handleInputChange = (e: any) => { const { id, value } = e.target; // ✅ Skip updating "role" manually // if (id === "role") return; setParams({ ...params, [id]: value }); }; const saveProfile = async () => { console.log("Saving profile...", params); // debug log if (!params.name || !params.email || !params.phonenumber) { showMessage("Please fill all required fields", "error"); return; } try { // ✅ Always use the role from localStorage (payload), not user-edited const finalParams = { ...params, role: role || "customer", }; if (finalParams.userid) { console.log("PUT request →", `http://localhost:3003/api/auth/users/${finalParams.userid}`); await axios.put(`http://localhost:3003/api/auth/users/${finalParams.userid}`, finalParams); fetchUsers(); showMessage("User updated successfully"); setTimeout(() => setEditModalOpen(false), 800); } else { console.warn("Missing userid — skipping PUT"); } setEditModalOpen(false); } catch (err: any) { console.error("Error saving user:", err); showMessage("Error saving user", "error"); } }; const handleViewInvoice = () => router.push("/invoice/preview"); const handleCancel = async () => { if (!confirm("Are you sure you want to cancel your subscription?")) return; const subscriptionId = 1; setLoading(true); try { const res = await axios.post("https://ebay.backend.data4autos.com/api/payment/cancel", { subscriptionId, }); alert("Subscription cancelled successfully!"); console.log(res.data); } catch (err) { alert("Failed to cancel subscription."); console.error(err); } finally { setLoading(false); } }; return (
{/* Subscription / Billing / Profile cards */}
{/* Subscription Card */}

Subscription

Subscription {payment?.plan || "N/A"}
Period {formatCreatedAtWithEnd(payment?.createdAt, payment?.plan)}
{/* Billing Card */}

Billing

Card •••• •••• •••• 1325{" "} VISA
Expires 3 / 2028
{/* Profile Card */}

Profile

Full Name {userDetails?.name}
Email {userDetails?.email || "N/A"}
Phone {userDetails?.phonenumber}
{/* Billing History Table */}

Billing History

{payment && ( )}
INVOICE NUMBER DATE STATUS AMOUNT PDF INVOICE
{payment.invoice_number || "INV-0001"} {formatCreatedAtWithEnd(payment?.createdAt).split(" - ")[0]} Paid ${payment.amount || "59.00"}
Showing {payment ? 1 : 0} of {payment ? 1 : 0} entries
setEditModalOpen(false)} params={params} onChange={handleInputChange} onSave={saveProfile} />
); }