let getGQL = function(url) {
    return async function(data) {
        let res = await fetch(url, {
            method: "POST",
            headers: {
                "content-type": "application/json"
            },
            body:  JSON.stringify(data)
        });

        return res.json();
    };
};

let gql = getGQL("http://shop-roles.asmer.fs.a-level.com.ua/graphql");

let login = async function(login, password) {
    let data = {
        query: "query log($login: String, $password: String) {login(login: $login, password: $password)}",
        variables: {
            login: login,
            password: password
        }
    };

    let res = await gql(data);
    let token = res["data"]["login"];

    return token;
};

let catByID = async function(id) {
    let data = {
        query: "query cat($query: String) {CategoryFindOne(query: $query) {_id name image {url}}}",
        variables: {
            query: JSON.stringify([{"_id": id}])
        }
    };

    let res = await gql(data);

    return res;
};

let goodByID = async function(id) {
    let data = {
        query: "query findGood($goodQuery: String) {GoodFindOne(query:$goodQuery) {_id name}}",
        variables: {
            goodQuery: JSON.stringify([{"_id": id}])
        }
    };

    let res = await gql(data);

    return res;
};

login("user789", "123123");
catByID("5dc49f4d5df9d670df48cc64");
goodByID("5dcad32b6d09c45440d14d0f");