package main

import (
	"encoding/json"
	"errors"
	"fmt"
	"github.com/rs/zerolog/log"
	"io"
	"net/http"
	"strings"
)

type Github struct {
}

type githubAPIResponse struct {
	TagName string `json:"tag_name"`
}

func (g Github) getLastVersion(s software) (string, error) {
	repo := strings.TrimPrefix(s.Data["url"], "https://github.com/")
	repo = strings.TrimSuffix(repo, "/")
	url := fmt.Sprintf("https://api.github.com/repos/%s/releases?per_page=1", repo)
	log.Debug().Str("url", url).Msg("url for github request")
	res, err := http.Get(url)
	if err != nil {
		return "", err
	}
	body, err := io.ReadAll(res.Body)
	if err != nil {
		return "", err
	}

	var data []githubAPIResponse

	err = json.Unmarshal(body, &data)
	if err != nil {
		return "", err
	}

	if len(data) != 1 {
		return "", errors.New("cant find any release")
	}

	return data[0].TagName, nil
}
