"use client"; import { DailyVideo, useAppMessage, useLocalSessionId, useParticipantIds, } from "@daily-co/daily-react"; import { useCallback, useEffect, useState } from "react"; import Avatar from "../components/Avatar"; import Card from "../components/Card"; import CreateRoom from "../components/CreateRoom"; import Join from "../components/Joining"; import { apiUrl } from "../utils"; const STATE_IDLE = "idle"; const STATE_JOINING = "joining"; const STATE_JOINED = "joined"; const STATE_LEFT = "left"; const BOT_STATE_STARTING = "bot_starting"; const BOT_STATE_STARTED = "bot_started"; export default function Call() { const [callState, setCallState] = useState(STATE_IDLE); const [roomUrl, setRoomUrl] = useState(); const [botState, setBotState] = useState(BOT_STATE_STARTING); const [params, setParams] = useState({}); const localSessionId = useLocalSessionId(); const participantIds = useParticipantIds({ filter: "remote" }); const sendAppMessage = useAppMessage({ onAppMessage: useCallback((ev) => setParams(ev.data), []), }); const start = useCallback(async () => { if (!process.env.NEXT_PUBLIC_DISABLE_LOCAL_AGENT) return; const resp = await fetch(`${apiUrl}/start`, { method: "POST", mode: "cors", cache: "no-cache", credentials: "same-origin", headers: { "Content-Type": "application/json", }, body: JSON.stringify({ room_url: roomUrl }), }); const data = await resp.json(); return data; }, [roomUrl]); useEffect(() => { if (callState !== STATE_JOINED || botState === BOT_STATE_STARTED) return; start(); }, [callState, botState, start]); if (callState === STATE_IDLE) { return ( { setRoomUrl(roomUrl); setCallState(STATE_JOINING); }} /> ); } if (callState === STATE_JOINING) { return setCallState(STATE_JOINED)} />; } // Main call loop return (