package santimpay import ( "fmt" "time" "github.com/SamuelTariku/FortuneBet-Backend/internal/config" "github.com/golang-jwt/jwt/v5" ) type SantimPayClient interface { GenerateSignedToken(amount int, reason string) (string, error) CheckTransactionStatus(id string) } type santimClient struct { cfg *config.Config } func NewSantimPayClient(cfg *config.Config) SantimPayClient { return &santimClient{ cfg: cfg, } } func (c *santimClient) GenerateSignedToken(amount int, reason string) (string, error) { now := time.Now().Unix() claims := jwt.MapClaims{ "amount": amount, "paymentReason": reason, "merchantId": c.cfg.SANTIMPAY.MerchantID, "generated": now, } token := jwt.NewWithClaims(jwt.SigningMethodES256, claims) privateKey, err := jwt.ParseECPrivateKeyFromPEM([]byte(c.cfg.SANTIMPAY.SecretKey)) if err != nil { return "", fmt.Errorf("invalid private key: %w", err) } signedToken, err := token.SignedString(privateKey) if err != nil { return "", fmt.Errorf("signing failed: %w", err) } return signedToken, nil } func (c *santimClient) CheckTransactionStatus(id string) { // optional async checker — can log or poll transaction status fmt.Println("Checking transaction status for:", id) }