// Package cli implements the command-line interface for the secret application. package cli import ( "git.eeqj.de/sneak/secret/internal/secret" "github.com/spf13/afero" "github.com/spf13/cobra" ) // Instance encapsulates all CLI functionality and state type Instance struct { fs afero.Fs stateDir string cmd *cobra.Command } // NewCLIInstance creates a new CLI instance with the real filesystem func NewCLIInstance() *Instance { fs := afero.NewOsFs() stateDir := secret.DetermineStateDir("") return &Instance{ fs: fs, stateDir: stateDir, } } // NewCLIInstanceWithFs creates a new CLI instance with the given filesystem (for testing) func NewCLIInstanceWithFs(fs afero.Fs) *Instance { stateDir := secret.DetermineStateDir("") return &Instance{ fs: fs, stateDir: stateDir, } } // NewCLIInstanceWithStateDir creates a new CLI instance with custom state directory (for testing) func NewCLIInstanceWithStateDir(fs afero.Fs, stateDir string) *Instance { return &Instance{ fs: fs, stateDir: stateDir, } } // SetFilesystem sets the filesystem for this CLI instance (for testing) func (cli *Instance) SetFilesystem(fs afero.Fs) { cli.fs = fs } // SetStateDir sets the state directory for this CLI instance (for testing) func (cli *Instance) SetStateDir(stateDir string) { cli.stateDir = stateDir } // GetStateDir returns the state directory for this CLI instance func (cli *Instance) GetStateDir() string { return cli.stateDir }