package monetix import ( "strings" "time" ) const ( DefaultRequestTimeout = 15 * time.Second DefaultStatusSuccess = "success" DefaultStatusProcessing = "processing" OutcomeSuccess = "success" OutcomeProcessing = "processing" OutcomeDecline = "decline" ) // Config holds resolved settings for communicating with Monetix. type Config struct { BaseURL string ProjectID int64 SecretKey string AllowedCurrencies []string RequireCustomerAddress bool RequestTimeout time.Duration StatusSuccess string StatusProcessing string } func DefaultConfig() Config { return Config{ RequestTimeout: DefaultRequestTimeout, StatusSuccess: DefaultStatusSuccess, StatusProcessing: DefaultStatusProcessing, } } func (c Config) timeout() time.Duration { if c.RequestTimeout <= 0 { return DefaultRequestTimeout } return c.RequestTimeout } // Timeout exposes the configured HTTP timeout for external callers. func (c Config) Timeout() time.Duration { return c.timeout() } func (c Config) CurrencyAllowed(code string) bool { code = strings.ToUpper(strings.TrimSpace(code)) if code == "" { return false } if len(c.AllowedCurrencies) == 0 { return true } for _, allowed := range c.AllowedCurrencies { if strings.EqualFold(strings.TrimSpace(allowed), code) { return true } } return false } func (c Config) SuccessStatus() string { if strings.TrimSpace(c.StatusSuccess) == "" { return DefaultStatusSuccess } return strings.ToLower(strings.TrimSpace(c.StatusSuccess)) } func (c Config) ProcessingStatus() string { if strings.TrimSpace(c.StatusProcessing) == "" { return DefaultStatusProcessing } return strings.ToLower(strings.TrimSpace(c.StatusProcessing)) }