package loaders

import (
	"encoding/json"
	"fmt"
	"os"
)

type Tokens struct {
	DeployCommands bool   `json:"deployCommands"`
	Bot            string `json:"bot"`
	HookID         string `json:"hookId"`
	HookToken      string `json:"hookToken"`
	BotPublicKey   string `json:"botPublicKey"`
}

var (
	tokens       Tokens
	invalidToken = "Token not found; Please setup a \"tokens.json\" file in root directory."
)

func LoadJSON(path string, v interface{}) error {
	var file, err = os.Open(path)
	if err != nil {
		fmt.Println(err.Error())
	}
	defer file.Close()

	decoder := json.NewDecoder(file)
	err = decoder.Decode(&v)
	if err != nil {
		fmt.Println(err.Error())
	}
	return err
}

func TokenLoader(token string) string {
	err := LoadJSON("tokens.json", &tokens)
	if err != nil {
		return invalidToken
	}
	switch token {
	case "bot":
		return tokens.Bot
	case "hookId":
		return tokens.HookID
	case "hookToken":
		return tokens.HookToken
	case "botPublicKey":
		return tokens.BotPublicKey
	}
	return invalidToken
}

func IsCmdsDeployable() bool {
	err := LoadJSON("tokens.json", &tokens)
	if err != nil {
		return false
	}
	return tokens.DeployCommands
}