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

//  (async () => {
//     console.log(await gql(`http://shop-roles.asmer.fs.a-level.com.ua/graphql`, `query cats{
//       CategoryFind(query:"[{}]"){
//         name goods{
//           name 
//         }
//       }
//     }`))
// })()





// const getGQL = url =>
//     (query, variables) => fetch(url, {
//         //метод
//         method: 'POST',
//         headers: {
//             //заголовок content-type
//             "Content-Type": "application/json"
//         },
//         body: JSON.stringify({query, variables})
//         //body с ключами query и variables
        
//     }).then(res => res.json()).then(
//         obj => {
//           let login = obj.data.login; 
//           console.log(login);

//           if (!login) {
//             throw new Error('login undefind');
//           }
//           return login;;
//         })
       
//         //расковырять data, если все ок - отдать data.login или data.CategoryFindOne, или шо там еще
//         //если есть errors и нет data, то выбросить исключение и тем самым зареджектить промис
        
//       .catch(console.log)

// const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql');
// gql(`
//     query NameForMe1($login:String, $password:String){
//         login(login:$login, password:$password)
//     }
// `, {login: 'tst', password: '123'})


//Task Светофор

// const div = document.createElement('div');
// div.id = 'trafficLights';
// div.style.backgroundColor = 'rgb(59, 52, 52)';
// div.style.width = '200px';
// div.style.height = '350px';

// const divRed = document.createElement('div');
// divRed.id = 'red';
// divRed.style.backgroundColor = 'rgb(232, 235, 209)';
// divRed.style.width = '90px';
// divRed.style.height = '90px';
// divRed.style.marginLeft = "27%";
// divRed.style.marginTop = "7%";
// divRed.style.display = 'inline-block';
// divRed.style.borderRadius  = '50px';

// const divOrange = document.createElement('div');
// divOrange.id = 'orange';
// divOrange.style.backgroundColor = 'rgb(232, 235, 209)';
// divOrange.style.width = '90px';
// divOrange.style.height = '90px';
// divOrange.style.marginLeft = "27%";
// divOrange.style.marginTop = "10%";
// divOrange.style.borderRadius  = '50px';

// const divGreen = document.createElement('div');
// divGreen.id = 'green';
// divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
// divGreen.style.width = '90px';
// divGreen.style.height = '90px';
// divGreen.style.marginLeft = "27%";
// divGreen.style.marginTop = "10%";
// divGreen.style.borderRadius  = '50px';

// document.body.append(div);
// div.append(divRed);
// div.append(divOrange);
// div.append(divGreen);

// const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))

// async function trafficLight(){
//     while (true){
//         divGreen.style.backgroundColor = 'green';//включаем зеленый
//         await delay(6000);
//         divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
//         divOrange.style.backgroundColor = 'rgb(237, 138, 57)';// включаем желтый
//         await delay(2000);
//         divOrange.style.backgroundColor = 'rgb(232, 235, 209)';
//         divRed.style.backgroundColor = 'rgb(235, 12, 23)'; //включаем красный
//         await delay(3500);
//         divRed.style.backgroundColor = 'rgb(232, 235, 209)';
//     }
// }
//  trafficLight();



 //Task domEventPromise


// const button = document.createElement('button');
// document.body.appendChild(button).innerText = "Click";

// function domEventPromise (knopka, eventName) {
//   return new Promise((resolve) => {
//      knopka.addEventListener(eventName, function getEvent(e) {
//       this.removeEventListener(eventName, getEvent);
//         resolve(e);
//     });
//   })
// }

// domEventPromise(button, 'click').then((e) => {
//   console.log('event click happens', e);
// })



// PedestrianTrafficLight


// const div = document.createElement('div');
// div.id = 'trafficLights';
// div.style.backgroundColor = 'rgb(59, 52, 52)';
// div.style.width = '200px';
// div.style.height = '350px';

// const divRed = document.createElement('div');
// divRed.id = 'red';
// divRed.style.backgroundColor = 'rgb(232, 235, 209)';
// divRed.style.width = '90px';
// divRed.style.height = '90px';
// divRed.style.marginLeft = "27%";
// divRed.style.marginTop = "7%";
// divRed.style.display = 'inline-block';
// divRed.style.borderRadius  = '50px';

// const divGreen = document.createElement('div');
// divGreen.id = 'green';
// divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
// divGreen.style.width = '90px';
// divGreen.style.height = '90px';
// divGreen.style.marginLeft = "27%";
// divGreen.style.marginTop = "10%";
// divGreen.style.borderRadius  = '50px';

// document.body.append(div);
// div.append(divRed);
// div.append(divGreen);

// const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))

// const button = document.createElement('button');
// document.body.appendChild(button).innerText = "Click";
// button.style.marginTop = "30px";

// function domEventPromise (knopka, eventName) {
//   return new Promise((resolve) => {
//      knopka.addEventListener(eventName, function getEvent(e) {
//       this.removeEventListener(eventName, getEvent);
//       button.setAttribute('disabled', true);
//       divRed.style.backgroundColor = 'rgb(232, 235, 209)';
//       divGreen.style.backgroundColor = 'green';
//       delay(2000).then(() => button.removeAttribute('disabled'));
//       resolve(e);
//     })
//   })
// }

// async function trafficLight(){
//   while (true){
//     divRed.style.backgroundColor = 'rgb(232, 235, 209)';
//     divGreen.style.backgroundColor = 'green';
//     await Promise.race([delay(2000), domEventPromise(button, 'click')]);
//     divRed.style.backgroundColor = 'rgb(235, 12, 23)';
//     divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
//     await Promise.race([delay(2000), domEventPromise(button, 'click')]);
//   }
// }

// trafficLight();


// Task speedtest

const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms));

async function speedtest(getPromise, count,parallel=1){
  let timedurationStart = performance.now();
  let arrFetch = [];
  for (let q = 0; q < parallel; q++) {
    arrFetch[q] = await getPromise();
  }
const timeBetween = performance.now();
  for (let i = 0; i < count; i++) {
    await Promise.all(arrFetch);
  }
  let timedurationEnd = performance.now();
      return {
          duration: timedurationEnd - timedurationStart,
          querySpeed: count / (timeBetween - timedurationStart), 
          queryDuration: (timeBetween - timedurationStart) / count, 
          parallelSpeed: (count * parallel)/ (timedurationEnd - timedurationStart),
          parallelDuration: (timedurationEnd - timedurationStart) / (count * parallel), 
      }
  }

speedtest(() => delay(1000), 10, 10 ).then(result => console.log(result))
speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5).then(result => console.log(result))