import { JanusJS } from "janus-gateway";
import { useEffect, useRef, useState } from "react"
import eventEmitter from "./eventEmitter";
import { LOCAL_EVENTS } from "../events";

const useLocalRTC = () => {
    
    const [handler, setHandler] = useState<JanusJS.PluginHandle | null>(null);
    const localStream = useRef<MediaStream | null>(new MediaStream());
    const [updater, setUpdater] = useState<boolean>(true);

    useEffect(() => {
        
        const handleGettingHandler = (handler: JanusJS.PluginHandle) => {
            setHandler(handler);
        };
        if(eventEmitter.listeners(LOCAL_EVENTS.HANDLER)) {
            eventEmitter.on(LOCAL_EVENTS.HANDLER, handleGettingHandler);
        }

        const gettingNewTrack = (track: MediaStreamTrack, on: boolean) => {
            if(!localStream.current) {
                localStream.current = new MediaStream();
            }
            on ? localStream.current.addTrack(track) : localStream.current.removeTrack(track);
            setUpdater(!updater);
        };
        if(eventEmitter.listeners(LOCAL_EVENTS.LOCAL_TRACK)) {
            eventEmitter.on(LOCAL_EVENTS.LOCAL_TRACK, gettingNewTrack);
        }
        
        const resetLocalStream = () => {
            localStream.current = null;
            setUpdater(!updater);
        };
        if(eventEmitter.listeners(LOCAL_EVENTS.NULL_STREAM)) {
            eventEmitter.on(LOCAL_EVENTS.NULL_STREAM, resetLocalStream);
        }

        return () => {
            eventEmitter.off(LOCAL_EVENTS.HANDLER, handleGettingHandler);
            eventEmitter.off(LOCAL_EVENTS.LOCAL_TRACK, gettingNewTrack);
        };
    }, []);
    return { handler, localStream: localStream.current};

};

export default useLocalRTC;