var env = process.env.NODE_ENV || 'testing'
const config = require('../config/config')[env]
const axios = require('axios')
const fs = require('fs')
var formData = require('form-data')

var gitlab = {
    // todo: GraphQL currentUser

    getUserByEmail: async function(email) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/users?search='+email,
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects}
        })
        .then(res => userData = {
            id: res.data[0].id,
            username: res.data[0].username
        })
        .catch(err => console.error(err))
    },
    createNewPages: async function(newPagesData, newLogoFile, template) {
        let data = new formData()
        data.append('avatar', fs.createReadStream(newLogoFile))

        return axios({
            method: 'post',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/user/'+newPagesData.getOwnerGitlabId()+
                '?name='+newPagesData.getName()+'&description='+newPagesData.getDesc()+'&tag_list=website'+
                '&use_custom_template=true&template_name='+template,
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects, 
                ...data.getHeaders()
            },
            data: data
        })
        .then(res => res = {
            error: false,
            data: res.data
        })
        .catch(err => res = {
            error: true,
            data: err.response.data
        })
    },
    updateProject: async function(updatedProjectData, newLogoFile){
        let data = new formData()
        if (newLogoFile) {
            data.append('avatar', fs.createReadStream(newLogoFile))
        }

        return axios({
            method: 'put',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+updatedProjectData.getId()+
                '?name='+updatedProjectData.getName()+'&description='+updatedProjectData.getDesc(),
            headers: { 
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects, 
                ...data.getHeaders()
            },
            data : data
        })
        .then(res => res = {
            error: false,
            data: res.data
        })
        .catch(err => res = {
            error: true,
            data: err.response.data
        })
    },
    getUserProjects: async function(gitlabUserId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/users/'+gitlabUserId+'/projects?private_token='+
                config.gitlab.token_readWriteProjects+'&owned=true&simple=true&visibility=public'
        })
        .then(res => res.data)
        .catch(err => console.error(err))
    },
    getProjectById: async function(projectId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'?private_token='+
                config.gitlab.token_readWriteProjects
        })
        .then(res => res.data)
        .catch(err => console.error(err))
    },
    getProjectPipelineLatestStatus: async function(projectId) {
        return axios({
            method: 'get',
            url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'/pipelines'
        })
        .then(res => res.data[0].status)
        .catch(err => console.error(err))
    },
    // delete peoject: https://docs.gitlab.com/ee/api/projects.html#delete-project
    //
    // test GraphQL
    getGraphqlTest: function(callback) {
        axios({
            url: 'https://gitlab.com/api/graphql',
            method: 'get',
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer '+config.gitlab.token_readWriteProjects
            },
            data: {
                query: `{
                    currentUser {
                        id
                        username
                    }
                }`
            /*  query: `{
                projects {
                    nodes {
                        id
                    }
                }
              }` */
            }
        }).then((result) => {
            console.log(JSON.stringify(result.data))
        });
    }
}

module.exports = gitlab