'use client'; import { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { useTranslation } from 'react-i18next'; import { DollarSign, TrendingUp, Calendar, Loader2, Star, } from 'lucide-react'; import toast, { Toaster } from 'react-hot-toast'; import AuthService from '@/app/services/AuthService'; import { getOwnerStatistics } from '@/app/utils/api'; const StatCard = ({ title, value, icon: Icon, color, subtitle, isNA }) => (

{title}

{isNA ? 'N/A' : value}
{subtitle &&

{subtitle}

}
); export default function OwnerAccountBookPage() { const { t, i18n } = useTranslation(); const [user, setUser] = useState(null); const [isLoading, setIsLoading] = useState(true); const [stats, setStats] = useState({ totalRevenue: null, totalReservations: null, activeProperties: null, financialRevenue: null, financialCommission: null, financialBalance: null, directRevenue: null, directCommission: null, directBalance: null, directRating: null, directPostponements: null, }); useEffect(() => { if (AuthService.isGuest()) { return; } if (!AuthService.isOwner()) { return; } const authUser = AuthService.getUser(); if (authUser) { setUser({ name: authUser.name || authUser.email, email: authUser.email, }); } async function fetchData() { try { const data = await getOwnerStatistics(); if (data) { setStats({ totalRevenue: data.totalRevenue ?? null, totalReservations: data.totalReservations ?? null, activeProperties: data.activeProperties ?? null, financialRevenue: data.financialRevenue ?? data.totalRevenue ?? null, financialCommission: data.financialCommission ?? null, financialBalance: data.financialBalance ?? null, directRevenue: data.directRevenue ?? null, directCommission: data.directCommission ?? null, directBalance: data.directBalance ?? null, directRating: data.directRating ?? null, directPostponements: data.directPostponements ?? null, }); } } catch { toast.error(t('accountBook.loadError')); } finally { setIsLoading(false); } } fetchData(); }, []); const formatCurrency = (amount) => { const num = Number(amount); if (isNaN(num)) return 'N/A'; return num.toLocaleString() + ' ' + t('currency-syp-suffix'); }; const formatNumber = (val) => { const num = Number(val); if (isNaN(num)) return 'N/A'; return num.toLocaleString(); }; const formatRating = (val) => { const num = Number(val); if (isNaN(num)) return 'N/A'; return num.toFixed(1); }; const isNA = (val) => val === null || val === undefined || val === ''; if (isLoading) { return (

{t('accountBook.loading')}

); } return (

{t('accountBook')}

{t('financialRecords')}

{t('accountBook.ownerFinancialOverview')}

{t('accountBook.directPropertyStats')}

); }