import { createContext, useState, useEffect, useContext, use, useRef } from "react"; import moment from "moment"; import { updateUser, writeToGoogleSheet } from "./backend"; import { useData } from "./useData"; const userContext=createContext(); const SessionTime={ A:["12:00", "13:30"], B:["13:30", "15:00"], C:["15:00", "17:30"], D:["17:30", "19:00"], E:["19:00", "20:30"], F:["20:30", "22:00"] } export function UserProvider({children}) { const [userId, setUserId] = useState(null); const [sessionId, setSessionId] = useState(null); // const [password, setPassword] = useState(null); const [choice, setChoice] = useState(null); const [summary, setSummary] = useState(null); const refChoice=useRef(); const refPassword=useRef(); const {data}=useData(); function getSessionId(){ return `${SessionTime[sessionId]!=null? SessionTime[sessionId][0].replace(':',''):'no-session'}`; } function getFileId(){ if(!userId){ if(data?.id){ return `${refPassword.current||''}_PC${data.id.toString().padStart(2,'0')}`; } return `${refPassword.current||moment().format('hhmmss')}_testuser`; }return `${refPassword.current||'0000'}_${userId}`; } function getDataId(){ if(!userId) return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${getSessionId()}/testuser_${moment().format('hhmmss')}`; return `${moment().format('YYYYMM')}/${moment().format("MMDD")}/${getSessionId()}/${userId}`; } function getUploadFolder(){ return `${moment().format("YYYYMM")}/${moment().format("MMDD")}/${getSessionId()}`; } function setPassword(pass){ refPassword.current=pass; console.log("Password changed:", pass); } function reset(){ setUserId(null); setSessionId(null); setPassword(null); setChoice(null); setSummary(null); } function saveHistory(history) { console.log('Saving history:', history); const data={ history, } updateUser('user/'+getDataId(), data) .then(() => { console.log("History saved successfully"); }) .catch((error) => { console.error("Error saving history:", error); }); } function writeSheet(){ writeToGoogleSheet( moment().format("YYYY/MM/DD"), getSessionId(), userId, refPassword.current ).then(() => { console.log("Data written to Google Sheet successfully"); }) .catch((error) => { console.error("Error writing data to Google Sheet:", error); }); } useEffect(()=>{ console.log("User ID changed:", refPassword.current, sessionId, userId); if(!userId) return; const data={ userId, // sessionId, password: refPassword.current||'', choice: choice||'', summary: summary||'', date: moment().format("YYYY-MM-DD hh:mm:ss"), fileId: getFileId(), }; console.log("Updating user data:", data); updateUser('user/'+getDataId(), data) .then(() => { console.log("User data updated successfully"); }) .catch((error) => { console.error("Error updating user data:", error); }); },[choice, summary, refPassword.current]); useEffect(() => { let symbol=''; for(const [key, value] of Object.entries(SessionTime)){ const start=moment(value[0], "HH:mm"); const end=moment(value[1], "HH:mm"); if(moment().isBetween(start, end)){ symbol=key; break; } } setSessionId(symbol); }, [userId]); useEffect(() => { console.log("Session ID changed:", sessionId); }, [sessionId]); // useEffect(()=>{ // refChoice.current=choice; // console.log("Choice changed:", choice); // }, [choice]); return ( {children} ); } export function useUser() { const context = useContext(userContext); if (!context) { throw new Error("useUser must be used within a UserProvider"); } return context; } export { userContext };