package main

import (
	"encoding/json"
	"flag"
	"fmt"
	"io/ioutil"
	"log"
	"strings"
)

var (
	flagName    string
	flagAuthor  string
	flagMain    string
	flagVersion string

	flagStatusFile string
	flagOutFile    string
)

func main() {
	flag.StringVar(&flagName, "name", "", "plugin name")
	flag.StringVar(&flagAuthor, "author", "", "plugin author")
	flag.StringVar(&flagMain, "main", "", "plugin main class")
	flag.StringVar(&flagVersion, "version", "", "plugin version, if not given, workspace status will be used")
	flag.StringVar(&flagStatusFile, "status_file", "", "path to workspace status file for version generation")
	flag.StringVar(&flagOutFile, "out_file", "plugin.yml", "path to output plugin.yml")
	flag.Parse()

	if flagVersion == "" {
		status, err := ioutil.ReadFile(flagStatusFile)
		if err != nil {
			log.Fatalf("ReadFile(%q): %v", flagStatusFile, err)
		}

		for _, line := range strings.Split(string(status), "\n") {
			line = strings.TrimSpace(line)
			parts := strings.Fields(line)
			if len(parts) != 2 {
				continue
			}
			if parts[0] == "STABLE_GIT_VERSION" {
				flagVersion = fmt.Sprintf("hscloud-git-%s", parts[1])
			}
		}
	}

	if flagVersion == "" {
		log.Fatalf("could not determine version from status")
	}

	// a yaml is a json, a json is a yaml
	yml := struct {
		Name       string `json:"name"`
		Version    string `json:"version"`
		Author     string `json:"author"`
		Main       string `json:"main"`
		APIVersion string `json:"api-version"`
	}{
		Name:       flagName,
		Version:    flagVersion,
		Author:     flagAuthor,
		Main:       flagMain,
		APIVersion: "1.15",
	}

	out, err := json.Marshal(&yml)
	if err != nil {
		log.Fatalf("marshal: %v", err)
	}
	err = ioutil.WriteFile(flagOutFile, out, 0644)
	if err != nil {
		log.Fatalf("WriteFile(%q): %v", out, err)
	}
}
