package minecraft

import (
	"encoding/json"
	"github.com/yuin/gopher-lua"
	"meow.tf/residentsleeper/events"
	"os"
	"path"
)

var (
	ops = make([]*minecraftOp, 0)
)

func init() {
	events.On(events.Init, loadOps)
	events.On(events.Op, oppedPlayer)
	events.On(events.Deop, deoppedPlayer)
}

type minecraftOp struct {
	UUID                string `json:"uuid"`
	Name                string `json:"name"`
	Level               int    `json:"level"`
	BypassesPlayerLimit bool   `json:"bypassesPlayerLimit"`
}

func loadOps(args ...interface{}) {
	opPath := path.Join(BasePath, "ops.json")

	f, err := os.Open(opPath)

	if err != nil {
		return
	}

	defer f.Close()

	ops = make([]*minecraftOp, 0)

	if err = json.NewDecoder(f).Decode(&ops); err != nil {
		return
	}
}

func oppedPlayer(args ...interface{}) {
	loadOps()
}

func deoppedPlayer(args ...interface{}) {
	loadOps()
}

func IsOp(name string) bool {
	for _, op := range ops {
		if op.Name == name {
			return true
		}
	}

	return false
}

func isOpFunc(L *lua.LState) int {
	name := L.CheckString(1)

	L.Push(lua.LBool(IsOp(name)))
	return 1
}