package main

import (
	"encoding/json"
	"fmt"

	log "github.com/sirupsen/logrus"
	"github.com/staktrace/go-update"

	"io"
	"net/http"
	"runtime"
)

func autoUpdate() {
	defer func() {
		if err := recover(); err != nil {
			log.Errorf("Download error: %s", err)
		}
	}()

	var api = "https://api.github.com/repos/webp-sh/webp_server_go/releases/latest"
	type Result struct {
		TagName string `json:"tag_name"`
	}
	var res Result
	log.Debugf("Requesting to %s", api)
	resp1, err := http.Get(api)
	if err != nil {
		log.Errorf("Error requesting to %s", api)
	}
	defer resp1.Body.Close()
	data1, _ := io.ReadAll(resp1.Body)
	_ = json.Unmarshal(data1, &res)
	var gitVersion = res.TagName

	if gitVersion > version {
		log.Infof("Time to update! New version %s found", gitVersion)
	} else {
		log.Debug("No new version found.")
		return
	}

	var filename = fmt.Sprintf("webp-server-%s-%s", runtime.GOOS, runtime.GOARCH)
	if runtime.GOOS == "windows" {
		filename += ".exe"
	}
	log.Info("Downloading binary to update...")
	resp, _ := http.Get(releaseURL + filename)
	if resp.StatusCode != 200 {
		log.Debugf("%s-%s not found on release.", runtime.GOOS, runtime.GOARCH)
		return
	}

	err = update.Apply(resp.Body, update.Options{})
	if err != nil {
		// error handling
		log.Errorf("Update error. %v", err)
	} else {
		log.Info("Update complete. Please restart to apply changes.")
	}
	_ = resp.Body.Close()
}
