import { computed } from 'vue'
import { 
    InterfaceName, 
    updateInterfaceParam, 
    getInterfaceData,
    getInterfaceParam,
    interfaces
} from './useInterfaces'
import { sendEvent, setCursor } from '@/composables/useCef'

export function useInterface(name: InterfaceName) {
    const getParam = (key: string, defaultValue: any = null) => {
        return getInterfaceParam(name, key, defaultValue);
    };
    
    const param = (key: string, defaultValue: any = null) => {
        return computed(() => getInterfaceParam(name, key, defaultValue));
    };

    const updateParam = (key: string, value: any) => {
        updateInterfaceParam(name, key, value);
    };

    const getParamValue = (key: string, defaultValue: any = null) => {
        return getInterfaceParam(name, key, defaultValue);
    };

    const getData = () => {
        return getInterfaceData(name);
    };

    const data = computed(() => getInterfaceData(name));

    return {
        getParam,
        param,
        updateParam,
        getData,
        getParamValue,
        value: getParamValue,
        sendEvent,
        setCursor,
        data,
        interfaces: computed(() => interfaces[name]),
    };
}