// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package commands

import (
	"context"
	"runtime"

	"github.com/bep/simplecobra"
	"github.com/gohugoio/hugo/common/hugo"
	"github.com/spf13/cobra"
)

func newEnvCommand() simplecobra.Commander {
	return &simpleCommand{
		name:  "env",
		short: "Display version and environment info",
		long:  "Display version and environment info. This is useful in Hugo bug reports",
		run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
			r.Printf("%s\n", hugo.BuildVersionString())
			r.Printf("GOOS=%q\n", runtime.GOOS)
			r.Printf("GOARCH=%q\n", runtime.GOARCH)
			r.Printf("GOVERSION=%q\n", runtime.Version())

			if r.isVerbose() {
				deps := hugo.GetDependencyList()
				for _, dep := range deps {
					r.Printf("%s\n", dep)
				}
			} else {
				// These are also included in the GetDependencyList above;
				// always print these as these are most likely the most useful to know about.
				deps := hugo.GetDependencyListNonGo()
				for _, dep := range deps {
					r.Printf("%s\n", dep)
				}
			}
			return nil
		},
		withc: func(cmd *cobra.Command, r *rootCommand) {
			cmd.ValidArgsFunction = cobra.NoFileCompletions
		},
	}
}

func newVersionCmd() simplecobra.Commander {
	return &simpleCommand{
		name: "version",
		run: func(ctx context.Context, cd *simplecobra.Commandeer, r *rootCommand, args []string) error {
			r.Println(hugo.BuildVersionString())
			return nil
		},
		short: "Display version",
		long:  "Display version and environment info. This is useful in Hugo bug reports.",
		withc: func(cmd *cobra.Command, r *rootCommand) {
			cmd.ValidArgsFunction = cobra.NoFileCompletions
		},
	}
}
