console.log(`--------------------------------------------------`);

// Operadores

console.log('Operadores:');

console.log(`--------------------------------------------------`);

console.log('Os Operadores do RXJS, podem ser divididos em 2 categorias, os operadores de criação, e os operadores encadeáveis.\nComo o próprio nome diz, os operadores de criação, criam os observables e "disponibilizam" a stream de dado.\nE os operadores encadeáveis, modificam essa stream de dados, eles são como composições de função para modificar os valores.');

console.log(`--------------------------------------------------`);

console.log('Pegando os repositorios do meu GitHub:');

console.log(`--------------------------------------------------`);

const { XMLHttpRequest } = require('xmlhttprequest')
const { ajax } = require('rxjs/ajax');
const { map, concatAll, filter, flatMap,} = require('rxjs/operators');

const pegandoOsRepositorios = (urlGitHub) => ajax({
  createXHR: () => new XMLHttpRequest(),
  url: urlGitHub,
})

const meuRepositorio = pegandoOsRepositorios('https://api.github.com/users/VictorKayk/repos')
  .pipe(
    map((repositorio) => repositorio.xhr.responseText),
    map((repositorio) => JSON.parse(repositorio)),
    concatAll(),
    filter((repositorio) => !repositorio.fork),
    map((repositorio) => {
      return {
        Nome: repositorio.name,
        Descrição: repositorio.description || 'Esse repositorio não tem descrição.',
        url: repositorio.html_url,
        Data: repositorio.created_at,
        Licença: repositorio.license ? repositorio.license.name : 'Esse repositorio não tem licensa.',
      }
    }),
    map((repositorio) => Object.entries(repositorio)),
    flatMap((repositorio) => repositorio),
    map(([ key, value ]) => `${key} : ${value}`)
  )
  .subscribe({
    next(repositorio) {
      console.log(`${repositorio}`)
    },
    comeplete() {
      console.log(`--------------------------------------------------`);
    }
  })
