const slugify = require('slugify')
const {exec} = require('child_process')
const axios = require('axios')

const siteId = process.env.NETLIFY_SITE_ID
const branchSlug = slugify(process.env.DRONE_SOURCE_BRANCH)
const prNumber = process.env.CI_PULL_REQUEST
console.log(process.env)

const alias = `${prNumber}-${branchSlug}`

const promiseExec = cmd => {
    return new Promise((resolve, reject) => {
        exec(cmd, (error, stdout, stderr) => {
            if (error) {
                reject(error)
                return
            }
            resolve(stdout)
        })
    })
}

(async function () {
    let stdout = await promiseExec(`./node_modules/.bin/netlify link --id ${siteId}`)
    console.log(stdout)
    stdout = await promiseExec(`./node_modules/.bin/netlify deploy --alias ${alias}`)
    console.log(stdout)
})()


// We need the user id of the bot to prevent multiple comments as the PR gets updated
const BOT_USER_ID = 8
// The gitea token from the pipeline settings
const giteaToken = process.env.BOT_TOKEN
// The second, hard coded part of this url is something you need to set in Netlify's site settings.
const fullPreviewUrl = `https://${alias}--canopymc.netlify.app`

const prIssueCommentsUrl = `https://git.jojodev.com/api/v1/repos/Canopy/website/issues/${prNumber}/comments`;

(async function () {

    // Here we get all comments through Gitea's API to see if there's already a comment from our bot
    const {data} = await axios.get(prIssueCommentsUrl)
    const hasComment = data.some(c => c.user.id === BOT_USER_ID)

    if (hasComment) {
        console.log(`PR #${prNumber} already has a comment with a link, not sending another comment.`)
        return
    }

    // Once we arrive here we know for sure there's no other comment yet. That means we can proceed to post one.
    await axios.post(prIssueCommentsUrl, {
        body: `
Hi ${process.env.CI_COMMIT_AUTHOR}!

Thank you for creating a PR!

[I've deployed a preview of the changes here.](${fullPreviewUrl})

> Beep boop, I'm a bot. :robot:
`,
    }, {
        headers: {
            'Content-Type': 'application/json',
            'accept': 'application/json',
            'Authorization': `token ${giteaToken}`,
        },
    })

    console.log(`Preview comment sent successfully to PR #${prNumber}!`)
})()
