package tools

import (
	"crypto/hmac"
	"crypto/sha256"
	"encoding/hex"
	"fmt"
)

type Verify struct {
	integrationSecret string
	integrationID     string
}

func NewVerify(integrationSecret, integrationID string) *Verify {
	return &Verify{
		integrationSecret: integrationSecret,
		integrationID:     integrationID,
	}
}

func (v *Verify) VerifySignature(clientUUID, signature string, amoID int) bool {
	expected := v.getSignature(clientUUID, amoID)
	return hmac.Equal([]byte(signature), []byte(expected))
}

func (v *Verify) getSignature(clientUUID string, amoID int) string {
	message := fmt.Sprintf("%s|%d", clientUUID, amoID)
	h := hmac.New(sha256.New, []byte(v.integrationSecret))
	h.Write([]byte(message))
	return hex.EncodeToString(h.Sum(nil))
}

func (v *Verify) CheckIntegrationID(clientUUID string) bool {
	if v.integrationID != clientUUID {
		return false
	}

	return true
}
