// Package rules defines Temporal stuff
package rules

import (
	"time"

	"code.tnxs.net/taxnexus/lib/api/crm/crm_client"
	"code.tnxs.net/taxnexus/lib/api/devops/devops_client"
	"code.tnxs.net/taxnexus/lib/api/ops/ops_client"
	"code.tnxs.net/taxnexus/lib/api/workflow/workflow_client"
	"code.tnxs.net/taxnexus/lib/app"
	"code.tnxs.net/taxnexus/lib/app/logger"
	temporal_client "go.temporal.io/sdk/client"
	"go.uber.org/zap/zapcore"
)

// const dateFormat = "2006-01-02"
// const dateTimeFormat = "2006-01-02T15:04:05-0800"
const backoffCoefficient = 2.0
const getTimeout = 6 * time.Minute
const heartbeatTimeout = 0
const initialInterval = time.Second
const maximumAttempts = 50
const maximumInterval = time.Minute
const postTimeout = 6 * time.Minute
const scheduleToCloseTimeout = 0
const scheduleToStartTimeout = 0
const startToCloseTimeout = time.Minute
const waitForCancelation = false

var sugar = logger.New(zapcore.DebugLevel)

var crmClient = crm_client.Default
var devopsClient = devops_client.Default
var opsClient = ops_client.Default
var workflowClient = workflow_client.Default

// NewDeveloperWorkflowID is the text identifier for new-developer-workflow
const NewDeveloperWorkflowID = "new-developer-workflow"

// NewIQWorkflowID is the text identifier for new-iq-workflow
const NewIQWorkflowID = "new-iq-workflow"

// NewAgentWorkflowID is the text identifier for new-iagentq-workflow
const NewAgentWorkflowID = "new-agent-workflow"

// TaxnexusRulesTaskQueueID defines the Temporal Task Queue used in the Temporal Worker
const TaxnexusRulesTaskQueueID = "TAXNEXUS_RULES_TASK_QUEUE"

// MyRules is the exported Temporal Client
var MyRules temporal_client.Client

// InitRules initializes the Temporal Client
func InitRules() error {
	sugar = logger.New(app.GetLogLevel())
	c, err := temporal_client.NewClient(
		temporal_client.Options{
			HostPort: "rules.noc.tnxs.net:7233",
		})
	if err != nil {
		return err
	}
	MyRules = c
	return nil
}
