package cmdshared

import (
	"encoding/json"
	"fmt"
	"github.com/packwiz/packwiz/core"
	"os"
	"sort"
	"time"
)

type McVersionManifest struct {
	Latest struct {
		Release  string `json:"release"`
		Snapshot string `json:"snapshot"`
	} `json:"latest"`
	Versions []struct {
		ID          string    `json:"id"`
		Type        string    `json:"type"`
		URL         string    `json:"url"`
		Time        time.Time `json:"time"`
		ReleaseTime time.Time `json:"releaseTime"`
	} `json:"versions"`
}

func (m McVersionManifest) CheckValid(version string) {
	for _, v := range m.Versions {
		if v.ID == version {
			return
		}
	}
	fmt.Println("Given version is not a valid Minecraft version!")
	os.Exit(1)
}

func GetValidMCVersions() (McVersionManifest, error) {
	res, err := core.GetWithUA("https://launchermeta.mojang.com/mc/game/version_manifest.json", "application/json")
	if err != nil {
		return McVersionManifest{}, err
	}
	dec := json.NewDecoder(res.Body)
	out := McVersionManifest{}
	err = dec.Decode(&out)
	if err != nil {
		return McVersionManifest{}, err
	}
	// Sort by newest to oldest
	sort.Slice(out.Versions, func(i, j int) bool {
		return out.Versions[i].ReleaseTime.Before(out.Versions[j].ReleaseTime)
	})
	return out, nil
}