import jsonpointer from 'json-pointer'
const delimiter = '_';

export function jsPointerToBinding(jsPointer: string) {
    return jsPointer.replace('/', '?').replace(/\//g, delimiter)
}

export function pointer(path: string[]) {
    return jsonpointer.compile(path);
}

export function binding(path: string[]) {
    return '?' + path.join(delimiter);
}

// TODO
// Better define an uri
export function isUri(str: string) {
    return (str.search('/') !== -1) && (str.search('\\?') === -1);
}

// TODO
// Better define a binding
export function isBinding(str: string) {
    return (str.search('\\?') === 0) && (str.search(':') === -1)
}

// TODO
// Better define a prefix
export function isPrefixed(str: string) {
    return (str.search('^[a-z0-9_]*:.*[^\.:]$') !== -1) && !isUri(str)
}

export function parseValue(str: string) {
    if (isPrefixed(str)) {
        return str;
    } else if (isUri(str)) {
        return '<'+str+'>'
    } else {
        return '"' + str +'"'
    }

}
// <https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex>
export function escapeRegExp(str: string) {
    return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
}

export function pathToBinding(path: string[]) {
    return '?' + path.join(delimiter);
}
