import {computed, ref, inject} from 'vue';

export default function (init) {
    const axios = inject('axios');

    const children = ref(init);

    function isOpen(child) {
        return child in children.value;
    }

    async function toggle(parent) {
        if (isOpen(parent.id)) {
            delete children.value[parent.id];
        } else {
            children.value[parent.id] = (await axios.get(parent.links.children)).data.data;
        }
    }

    function childrenOf(parentId) {
        return children.value[parentId] ? children.value[parentId] : [];
    }

    function clearToggle() {
        children.value = {};
    }

    return {
        isOpen,
        toggle,
        childrenOf,
        clearToggle,
    };
}