// This package provides --quiet and --verbose flags for cli and corresponding output print functions PrintOut and PrintVerbose.
// Another line
package ui

import (
	"fmt"
	"io"
	"os"

	"github.com/spf13/pflag"
)

var stdOutput io.Writer
var verboseOutput io.Writer

func init() {
	outputFlagSet := pflag.NewFlagSet("output", pflag.ContinueOnError)
	outputFlagSet.ParseErrorsWhitelist.UnknownFlags = true
	outputFlagSet.SetOutput(nil)

	isVerbose := outputFlagSet.BoolP("verbose", "V", false, "If set adds additional details to output.")
	isQuiet := outputFlagSet.BoolP("quiet", "q", false, "If set makes no output at all.")

	err := outputFlagSet.Parse(os.Args)
	if err != nil {
		fmt.Println(err)
		os.Exit(1)
	}

	SetupOutputMode(*isQuiet, *isVerbose)
}

func SetupOutputMode(isQuiet bool, isVerbose bool) {
	if isQuiet {
		stdOutput = io.Discard
		verboseOutput = io.Discard
        return
	}

	if isVerbose {
        stdOutput = os.Stdout
		verboseOutput = os.Stdout
        return
	}

    stdOutput = os.Stdout
    verboseOutput = io.Discard
}

func PrintOut(a ...any) (n int, err error) {
	n, err = fmt.Fprintln(stdOutput, a...)
	return
}

func PrintVerbose(a ...any) (n int, err error) {
	n, err = fmt.Fprintln(verboseOutput, a...)
	return
}