{"size": 2715, "ext": "js", "max_stars_repo_path": "promise/Promise.js", "max_stars_repo_name": "Tvitor/Javascript", "max_stars_repo_stars_event_min_datetime": null, "max_stars_repo_stars_event_max_datetime": null, "max_issues_repo_path": "promise/Promise.js", "max_issues_repo_name": "Tvitor/Javascript", "max_issues_repo_issues_event_min_datetime": null, "max_issues_repo_issues_event_max_datetime": null, "max_forks_repo_path": "promise/Promise.js", "max_forks_repo_name": "Tvitor/Javascript", "max_forks_repo_forks_event_min_datetime": null, "max_forks_repo_forks_event_max_datetime": null}
{"max_stars_count": null, "max_issues_count": null, "max_forks_count": null, "avg_line_length": 28.28125, "max_line_length": 124, "alphanum_fraction": 0.5314917127}
const util = require('util')
const obterEnderecoAsync = util.promisify(obterEndereco)

obterUsuario = () => {
        return new Promise(function resolvePromise(resolve, reject) {
            return resolve({
                id: 1,
                nome: 'Luke',
                dataNascimento: new Date()
            })
        })
        
}

obterTelefone = (idUsuario) => {
    return new Promise(function resolvePromise(resolve, reject) {
        return resolve({
        telefone:'998899999',
        ddd:21
        })
    })
}

function obterEndereco (idUsuario, callback) {
    return callback(null, {
        endereco: 'Rua Paulo Nunes',
        numero: 333,
        cep: 32345555,
        bairro: 'Luiz Paulo'
    })
}


const usuarioPromise = obterUsuario()

usuarioPromise
    .then(function (usuario) {
        return obterTelefone(usuario.id)
            .then(function resolverTelefone(result) {
                return {
                    usuario: {
                    nome: usuario.nome,
                    id: usuario.id
                },
                telefone: result
            }
        })
    })
    .then(function (resultado) {
        const endereco = obterEnderecoAsync(resultado.usuario.id)
        return endereco.then(function resolverendereco(result) {
            return {
                usuario: resultado.usuario,
                telefone: resultado.telefone,
                endereco: result
            }
        })
    })
    .then(function(resultado) {
        console.log(`
            nome: ${resultado.usuario.nome}
            endereco: ${resultado.endereco.endereco}, ${resultado.endereco.numero}
            telefone: ${resultado.telefone.ddd} ${resultado.telefone.telefone}`)
})
    .catch(function (erro0) {
        console.error('nao foi possivel obter usuario', erro0)
    })

// obterUsuario(function resolverUsuario(erro0, usuario) {
//     if (erro0) {
//         console.error('não foi possível obter usuário', erro0)
//         return;
//     }

//     obterTelefone(usuario.id, function resolverTelefone(erro1, telefone) {
//         if (erro1) {
//             console.error('Não foi possível obter telefone do usuário', erro1)
//             return;
//         }


//         obterEndereco(usuario.id, function resolverEndereco(erro2, endereco) {
//             if (erro2) {
//                 console.error('Não foi possível obter endereço do usuário', erro2)
//                 return;
//             }

//             console.log(`
//                 nome:${usuario.nome}
//                 endereco: ${endereco.endereco} numero: ${endereco.numero} cep: ${endereco.cep} bairro: ${endereco.bairro}
//                  `)

//         })
//     })
// })
