// let gql = (url, query, variables={}) =>
//     fetch(url, {
//         method: 'POST',
//         headers:{
//             Accept: 'application/json',
//             "Content-Type": 'application/json'
//         },
//         body: JSON.stringify({query, variables})
//     }).then(res => res.json())

// используя функцию gql, понаделать функций с параметрами для разных запросов: категории, категория по id с товарами, 
// товар по id с картинками и описанием, логин, регистрация.

// например:

// const gqlLogin = (login, password) =>
//    gql('http://shop-roles.node.ed.asmer.org.ua/graphql', `query login($login:String, $password: String){
//      login(login:$loagin, password: $password)
// }`, {login, password})

let gql = (url, query, variables = {}) =>
    fetch(url, {
        method: 'POST',
        headers: {
            Accept: 'application/json',
            "Content-Type": 'application/json'
        },
        body: JSON.stringify({ query, variables })
    }).then(res => res.json())

const url = 'http://shop-roles.node.ed.asmer.org.ua/graphql'

// категории

const gqlCategoriesList = () => {
    return gql(url, `query cats{
        CategoryFind(query: "[{}]"){
            _id, name
        }
    }`, {})
}

// категория по id с товарами

const productSearchById = (id) => {
    let jsn = JSON.stringify({ _id: id })
    return gql(
        url,
        `query searchById{
            GoodFind(query: ${JSON.stringify(`[${jsn}]`)}){
                name description images {
                    _id
                    createdAt
                    text
                    url
                    originalFileName
                }
            }
        }`
    );
};

// товар по id с картинками и описанием

const gqlCategories = () => {
    return gql(url,
        ` query categories{
            CategoryFind(query:"[{}]"){
                _id name goods {
                    _id
                    name
                    price
                    description
                }
            }
        }`
    );
}

// логин

const gqlLogin = (login, password) => {
    gql(url, `query login($login:String, $password: String){
        login(login:$login, password: $password)
       }`,
    { login, password })
}

// регистрация

const gqlRegister = (login, password) => {
    return gql(url, `mutation register($login: String, $password: String){
        UserUpsert(user: {login: $login, password: $password}){
            _id, login, createdAt
        }
    }`, { login, password })
}

(async function call() {
    console.log(await gqlCategoriesList());
    console.log(await gqlRegister("Dmytro Suslov", "qwerty"));
    console.log(await gqlLogin("Dmytro Suslov", "qwerty"));
    console.log(await gqlCategories());
    console.log(await productSearchById("62d5ca00b74e1f5f2ec1a156"));
})();