package rules

import (
	"code.tnxs.net/taxnexus/lib/api/ops/ops_client/payment_method"
	"code.tnxs.net/taxnexus/lib/api/ops/ops_models"
	"code.tnxs.net/taxnexus/lib/app"
	httptransport "github.com/go-openapi/runtime/client"
	"go.temporal.io/sdk/workflow"
)

// StorePaymentMethodActivity posts a new paymentmethod object to datastore
func StorePaymentMethodActivity(ctx workflow.Context, w app.PaymentMethodActivityWrapper) error { //nolint:gocritic,lll // don't care
	postPaymentMethodParams := payment_method.NewPostPaymentMethodsParamsWithTimeout(postTimeout)
	obj := &ops_models.PaymentMethod{
		AccountID:        w.AccountID,
		AchAccountType:   w.AchAccountType,
		AchBankAccount:   w.AchBankAccount,
		AchRouting:       w.AchRouting,
		Active:           w.Active,
		Autopay:          w.Autopay,
		BankName:         w.BankName,
		BillingContactID: w.BillingContactID,
		CCnumber:         w.CCnumber,
		CCtype:           w.CCtype,
		ContractID:       w.ContractID,
		Default:          w.Default,
		ExpirationMonth:  w.ExpirationMonth,
		ExpirationYear:   w.ExpirationYear,
		Gateway:          w.Gateway,
		GatewayKey:       w.GatewayKey,
		Nickname:         w.Nickname,
		RecordType:       w.RecordType,
		Ref:              w.Ref,
		TenantID:         w.TenantID,
	}
	postPaymentMethodParams.PaymentMethodRequest = &ops_models.PaymentMethodRequest{
		Data: []*ops_models.PaymentMethod{obj},
	}
	_, err := opsClient.PaymentMethod.PostPaymentMethods(postPaymentMethodParams,
		httptransport.APIKeyAuth(
			"X-API-Key",
			"header",
			w.APIKey,
		))
	if err != nil {
		return err
	}
	sugar.Info("rules.storePaymentMethod: 👍 📤")
	return nil
}
