//go:build e2e

package e2e

import (
	"encoding/json"
	"strings"
	"testing"

	"github.com/stretchr/testify/require"
)

func TestVersionFlag(t *testing.T) {
	bin := buildAgentTeam(t)

	t.Run("--version prints version info", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--version")
		require.Contains(t, out, "Version")
		require.Contains(t, out, "Commit")
		require.Contains(t, out, "Built")
		require.Contains(t, out, "Golang")
	})

	t.Run("-v short flag prints version info", func(t *testing.T) {
		out := runAgentTeam(t, bin, "-v")
		require.Contains(t, out, "Version")
		require.Contains(t, out, "Commit")
	})

	t.Run("--version -f json outputs valid JSON", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--version", "-f", "json")
		var info struct {
			Version string `json:"version"`
			Commit  string `json:"commit"`
			Built   string `json:"built"`
			Go      string `json:"go"`
		}
		require.NoError(t, json.Unmarshal([]byte(out), &info))
		require.NotEmpty(t, info.Version)
	})

	t.Run("--version --format jsonc outputs valid JSON", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--version", "--format", "jsonc")
		var info struct {
			Version string `json:"version"`
		}
		require.NoError(t, json.Unmarshal([]byte(out), &info))
		require.NotEmpty(t, info.Version)
	})

	t.Run("--version -f yaml outputs YAML", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--version", "-f", "yaml")
		require.Contains(t, out, "version:")
		require.Contains(t, out, "commit:")
	})

	t.Run("--version -f toml outputs TOML", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--version", "-f", "toml")
		require.Contains(t, out, "Version")
		require.Contains(t, out, "Commit")
	})

	t.Run("unsupported format returns error", func(t *testing.T) {
		out := runAgentTeamExpectErr(t, bin, true, "--version", "-f", "xml")
		require.Contains(t, out, "unsupported format")
	})
}

func TestVersionSubcommandRemoved(t *testing.T) {
	bin := buildAgentTeam(t)

	t.Run("version subcommand no longer exists", func(t *testing.T) {
		out := runAgentTeamExpectErr(t, bin, true, "version")
		require.Contains(t, out, "unknown command")
	})

	t.Run("help does not list version subcommand", func(t *testing.T) {
		out := runAgentTeam(t, bin, "--help")
		lines := strings.Split(out, "\n")
		for _, line := range lines {
			trimmed := strings.TrimSpace(line)
			// The help output may list "version" in the flag section (--version)
			// but should NOT have a standalone "version" command entry
			if trimmed == "version" {
				t.Fatalf("help output should not list 'version' as a subcommand, got:\n%s", out)
			}
		}
	})
}
