package main

import (
	"fmt"
	"os"
	"os/exec"
	"time"
)

func buildV2Ray(targetFile string, version string, goOS GoOS, goArch GoArch, extraLdFlags string) error {
	goPath := os.Getenv("GOPATH")
	ldFlags := "-s " + extraLdFlags
	if version != "custom" {
		year, month, day := time.Now().UTC().Date()
		today := fmt.Sprintf("%04d%02d%02d", year, int(month), day)
		ldFlags = ldFlags + " -X v2ray.com/core.version=" + version + " -X v2ray.com/core.build=" + today
	}
	cmd := exec.Command(
		"go", "build",
		"-tags", "json",
		"-o", targetFile,
		"-compiler", "gc",
		"-ldflags", ldFlags,
		"-gcflags", "-trimpath="+goPath,
		"-asmflags", "-trimpath="+goPath,
		"v2ray.com/core/main")
	cmd.Env = append(cmd.Env, "GOOS="+string(goOS), "GOARCH="+string(goArch), "CGO_ENABLED=0")
	cmd.Env = append(cmd.Env, os.Environ()...)
	output, err := cmd.CombinedOutput()
	if len(output) > 0 {
		fmt.Println(string(output))
	}
	return err
}

func signFile(file string) error {
	pass := os.Getenv("GPG_SIGN_PASS")
	cmd := exec.Command("gpg", "--digest-algo", "SHA512", "--no-tty", "--batch", "--passphrase", pass, "--output", file+".sig", "--detach-sig", file)
	cmd.Env = append(cmd.Env, os.Environ()...)
	output, err := cmd.CombinedOutput()
	if len(output) > 0 {
		fmt.Println(string(output))
	}
	return err
}
