const fetchData = require('../utils/fetchData')
//si algo nunca va a cambiar en la vida se pone con letras mayusculas
const API = '<https://rickandmortyapi.com/api/character/>'

/**
 * 1 pedir el numero total de personajes
 * 2 pedir el nombre del primer personaje en la posicion 0
 * 3 pedir la dimension de ese personaje mediante la direccion de la api
 */

const anotherFunction = async (url_api) => { //declaramos la funcion como asincrona
  //todas las peticiones dentro de try y catch son tomadas como then por lo que se inician una vez terminado la anterior
  try { //usamos try catch para el manejo de respuestas, cada linea es manejada como un then 
    const data = await fetchData(url_api) //primera peticion o then
    const character = await fetchData(`${url_api}${data.results[0].id}`) //segunda peticion o dhen, usa la data de la anterior
    const origin = await fetchData(character.origin.url) //tercera peticion, usa la data de la anterior

    console.log(data.info.count)
    console.log(character.name)
    console.log(origin.dimension)
  } catch(error) { //si obtuvieramos un error eso seria lo que regresara
    console.error(error)
  }
}

console.log('Before')
anotherFunction(API) //esto se reflejara en consola hasta el ultimo, y muestra todo junto una vez termina
console.log('After')
//podrias usar fetch o esto...
//se haran peticiones usando los datos que tenga dentro la peticion anterior
/* Reto:
1. Crear una funcion que nos permita traer info desde la api
2. Le pasaremos un callback
3. Hacer el llamado de lo que necesitamos
*/

// to es6

//instanciamos las peticiones viejas
let XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest
//let API = '<https://rickandmortyapi.com/api/character/>'

//Funcion de consulta con promises en es6
const fetchData = (url_api) => {
  //se declara pa promesa
  return new Promise ((resolve, reject) => {
    //crea un objeto con httprequest (porque no estamos trabajando en el navegador sino con el editor de texto)
    const xhttp = new XMLHttpRequest()
    xhttp.open('GET', url_api, true) //peticion
    xhttp.onreadystatechange = (() => { //verifica cada evento de cambio
      if (xhttp.readyState === 4) { //en state 4 se abre el siguiente paso 
        (xhttp.status === 200) //si es un 200 pasa lo siguiente
          //es el resolve de la promesa de arriba
          ? resolve(JSON.parse(xhttp.responseText)) //se retorna la respuesta de la api
          //es el reject de la promesa de arriba
          : reject(new Error('Error', url_api)) //si no es 200 se retorna un error
      }
    })
    //ahora se envia la peticion
    xhttp.send()
  })
}

//node aun usa commun JS por lo que no se puede usar import o export solamente como con babel
module.exports = fetchData