/* eslint-disable no-undef */
import fetch from "node-fetch"
import path from "path"
import { exists, writeSync, readdirSync, rm, readSync } from "./file.js"

export default class Downloader {

    async github(history_url, raw_url, filepath) {
        const historyResponse = await fetch(history_url)
        const historyData = await historyResponse.json()
        const lastCommit = historyData[0]
        const lastCommitDate = new Date(lastCommit.commit.committer.date)
        console.log(`Last commit date: ${lastCommitDate.getTime()}`)
        const ext = path.extname(filepath)
        const basename = path.basename(filepath).replace(ext, '')
        filepath = path.join(filepath, "..", `${basename}_${lastCommitDate.getTime()}${ext}`)

        if (exists(filepath)) {
            console.log(`${basename} is the latest version.`)
            return JSON.parse(readSync(filepath))
        }
        const response = await fetch(raw_url)
        const data = await response.json()
        writeSync(JSON.stringify(data), filepath)
        console.log(`${basename} is updated.`)

        // remove old file
        const files = readdirSync(path.join(__projectRoot, __config.folder.operator, __config.folder.share))
        for (const file of files) {
            if (file.startsWith(basename) && file !== path.basename(filepath)) {
                rm(path.join(__projectRoot, __config.folder.operator, __config.folder.share, file))
            }
        }
        return data
    }
}