// React
import { useEffect, useRef } from 'react';
import DeviceInfo from 'react-native-device-info';
// Context
import { useTeamConnexion } from "../context/teamConnexionContext";
// Hook
import { useSocketCommands } from "./useSocketCommands";

export const useSendDeviceInfo = () => {
    const { emitBattery, emitDeviceInfo } = useSocketCommands();
    const { loggedIn } = useTeamConnexion();
    const isMounted = useRef(true);

    useEffect(() => {
        isMounted.current = true;

        if (!loggedIn) return;

        const sendInfo = async () => {
            const [brand, model, name] = await Promise.all([
                DeviceInfo.getBrand(),
                DeviceInfo.getModel(),
                DeviceInfo.getDeviceName()
            ]);
            if (!isMounted) return;
            emitDeviceInfo({model: brand + " " + model, name: name});
        };

        const sendBattery = async () => {
            const level = await DeviceInfo.getBatteryLevel();
            if (!isMounted) return;
            emitBattery(Math.round(level * 100));
        };

        sendInfo();
        sendBattery();

        const batteryCheckInterval = setInterval(() => sendBattery(), 5*60*1000); // 5 minutes

        return () => {
            isMounted.current = false;
            clearInterval(batteryCheckInterval);
        };
    }, [emitBattery, emitDeviceInfo, loggedIn]);

    return null;
};
