package cli import ( "encoding/json" "fmt" "os" "path/filepath" ) type Config struct { ServerURL string `json:"serverUrl"` AccessToken string `json:"accessToken"` AccountNumber string `json:"accountNumber"` } func GetConfigDir() (string, error) { home, err := os.UserHomeDir() if err != nil { return "", err } configDir := filepath.Join(home, ".tcman") if err := os.MkdirAll(configDir, 0755); err != nil { return "", err } return configDir, nil } func GetConfigPath() (string, error) { configDir, err := GetConfigDir() if err != nil { return "", err } return filepath.Join(configDir, "config.json"), nil } func LoadConfig() (*Config, error) { configPath, err := GetConfigPath() if err != nil { return nil, err } data, err := os.ReadFile(configPath) if err != nil { if os.IsNotExist(err) { return &Config{ ServerURL: "http://localhost:8080", }, nil } return nil, err } var config Config if err := json.Unmarshal(data, &config); err != nil { return nil, fmt.Errorf("invalid config file: %w", err) } if config.ServerURL == "" { config.ServerURL = "http://localhost:8080" } return &config, nil } func (c *Config) Save() error { configPath, err := GetConfigPath() if err != nil { return err } data, err := json.MarshalIndent(c, "", " ") if err != nil { return err } return os.WriteFile(configPath, data, 0644) } func (c *Config) IsAuthenticated() bool { return c.AccessToken != "" && c.AccountNumber != "" }