import { isEmpty } from "lodash";
import React, { useContext, useEffect, useState } from "react";
import { Link, useLocation } from "react-router-dom";
import AuthProvider from "../context/AuthContext";
import io from "socket.io-client";
import { apiGet, apiPost } from "../Utils/apiFetch";
import apiPath from "../Utils/apiPath";
import obj from "../Utils/helpers";
import MessageBox from "./MessageBox";
import WalletWrap from "./WalletWrap";
import BetSlipContext from "../context/BetSlipContext";
const Header = () => {
let {
user,
user_coins,
logoutUser,
setOpenBetsToogle,
setSettingToogle,
setIsTv,
setAnnouncmentToogle,
isTv,
setWalletOpen,
walletOpen,
} = useContext(AuthProvider);
const location = useLocation();
let { betLoader, unMatchedBets, setRefreshCurrentBets, balanceRefresh, setBalanceRefresh } =
useContext(BetSlipContext);
const [refresh, setRefresh] = useState(false);
const [loader, setLoader] = useState(false);
const [loader1, setLoader1] = useState(false);
// Synchronize local balance state with user_coins from AuthContext
const [balance, setBalance] = useState({
totalCoins: user_coins?.totalCoins || 0,
exposure: user_coins?.exposure || 0
});
// Update local balance when user_coins changes
// useEffect(() => {
// setBalance({
// totalCoins: user_coins?.totalCoins || 0,
// exposure: user_coins?.exposure || 0
// });
// }, [user_coins]);
const refreshAmount = () => {
setRefresh(true);
const newSocket = io(
`${import.meta.env.VITE_API_BASE_URL_OLD}?token=${localStorage.getItem(
"token"
)}&userType=front`,
{
transports: ["websocket"],
}
);
const coinListener = (message) => {
setBalance({
totalCoins: message.results.totalCoins,
exposure: message.results.exposure
});
setRefresh(false);
};
const forceLogout = (message) => {
const uniqueId = localStorage.getItem("uniqueId");
if (uniqueId !== message.results.uniqueId) {
logoutUser();
}
};
newSocket.emit("getCoins", { user_id: user ? user.user._id : "" });
newSocket.on("listenGetCoin", coinListener);
newSocket.on("listenForceLogout", forceLogout);
return () => newSocket.close();
};
const recallCasinoAmount = async (event) => {
if (!isEmpty(user)) {
setLoader(true);
try {
const { status, data: response_users } = await apiPost(
apiPath.withdrawCasinoAmount,
{ amount: casionData ? casionData : user_coins?.casinoCoins }
);
if (status === 200) {
if (response_users.status) {
if (response_users.data.status === "0000") {
setLoader(false);
mainBalanceClick();
} else {
setLoader(false);
}
} else {
setLoader(false);
}
}
} catch (err) {
setLoader(false);
}
}
};
const recallEgtCasinoAmount = async (event) => {
if (!isEmpty(user)) {
setLoader1(true);
try {
const { status, data: response_users } = await apiPost(
apiPath.withdrawEgtCasinoAmount,
{ amount: 0 }
);
if (status === 200) {
if (response_users.status) {
setLoader1(false);
mainEgBalanceClick();
getCoins();
} else {
setLoader1(false);
}
}
} catch (err) {
setLoader1(false);
}
}
};
const [casionData, setCasinoData] = useState(0);
const [egtCasionData, setEgtCasionData] = useState(0);
const mainBalanceClick = async () => {
let { status, data: response_users } = await apiPost(apiPath.awcBalance);
if (status === 200) {
if (!isEmpty(response_users.data)) {
setCasinoData(response_users.data.balance);
}
}
};
const mainEgBalanceClick = async () => {
let { status: status1, data: response_users1 } = await apiPost(
apiPath.egtBalance
);
if (status1 === 200) {
if (!isEmpty(response_users1.data)) {
setEgtCasionData(response_users1.data.balance);
}
}
};
// const getCoins = async () => {
// if (!isEmpty(user)) {
// const { status, data } = await apiGet(apiPath.refreshAmount);
// if (status === 200) {
// if (data.success) {
// setBalance({
// totalCoins: data?.results?.totalCoins,
// exposure: data?.results?.exposure
// });
// }
// }
// }
// };
const getCoins = async () => {
if (!isEmpty(user)) {
setRefresh(true);
try {
const { status, data } = await apiGet(apiPath.refreshAmount);
if (status === 200 && data?.success) {
setBalance({
totalCoins: data?.results?.totalCoins,
exposure: data?.results?.exposure,
});
}
} finally {
setRefresh(false);
}
}
};
useEffect(() => {
if (!isEmpty(user)) {
getCoins();
mainBalanceClick();
mainEgBalanceClick();
}
}, [user]);
useEffect(() => {
if (balanceRefresh) {
getCoins();
setBalanceRefresh(false);
}
}, [balanceRefresh]);
const [message, setMessage] = useState([]);
const messageList = async () => {
let hostname = window.location.hostname;
hostname = hostname.replace(/^www\./, "");
hostname = hostname.replace(/^ag\./, "");
hostname = hostname || "sabaexch.com";
const { status, data: response_users } = await apiGet(
apiPath.messageList + "?domain=" + hostname
);
if (status === 200) {
if (response_users.success) {
setMessage(response_users.results);
}
}
};
useEffect(() => {
messageList();
}, []);
return (
<>
{!isEmpty(user) && (
Back
England{" "}
$1,000 at odds{" "}
1.29
)}
{
setOpenBetsToogle(true);
setRefreshCurrentBets(true);
}}
className="a-open_bets ui-link"
href="javascript:void(0)"
>
Bets
{unMatchedBets?.length > 0 && (
)}
getCoins()}
title="Refresh Main Wallet"
>
Bet Matched