// Package trigger is a legacy compatibility facade for old trigger APIs and
// MCP tool wiring. New schedule code should import internal/schedule/manage
// directly so schedule routes do not depend on the legacy trigger package.
package trigger

import (
	"log/slog"

	"github.com/tidbcloud/AgentTeam/internal/core/runeffect"
	"github.com/tidbcloud/AgentTeam/internal/coredb"
	"github.com/tidbcloud/AgentTeam/internal/schedule/manage"
	"github.com/tidbcloud/AgentTeam/internal/store/model"
)

type AppPort = manage.AppPort
type MessageValidator = manage.MessageValidator
type ServiceOptions = manage.ServiceOptions
type Service = manage.Service

func New(logger *slog.Logger, db coredb.DB, appPort AppPort, options ServiceOptions) *Service {
	return manage.New(logger, db, appPort, options)
}

type DefinitionStatus = manage.DefinitionStatus

const (
	StatusActive    = manage.StatusActive
	StatusPaused    = manage.StatusPaused
	StatusBlocked   = manage.StatusBlocked
	StatusCompleted = manage.StatusCompleted
)

type SourceKind = manage.SourceKind

const (
	SourceKindTime  = manage.SourceKindTime
	SourceKindEvent = manage.SourceKindEvent
)

type TimeMode = manage.TimeMode

const (
	TimeModeOneShotAbsolute = manage.TimeModeOneShotAbsolute
	TimeModeOneShotRelative = manage.TimeModeOneShotRelative
	TimeModeInterval        = manage.TimeModeInterval
	TimeModeCron            = manage.TimeModeCron
)

type TargetKind = manage.TargetKind

const (
	TargetKindChannel     = manage.TargetKindChannel
	TargetKindReplyThread = manage.TargetKindReplyThread
	TargetKindDM          = manage.TargetKindDM
)

type HumanNotificationMode = manage.HumanNotificationMode

const HumanNotificationModeNone = manage.HumanNotificationModeNone

type DeliveryPolicy = manage.DeliveryPolicy

const (
	DeliveryPolicyDefault              = manage.DeliveryPolicyDefault
	DeliveryPolicyAppEventForPrincipal = manage.DeliveryPolicyAppEventForPrincipal
)

type RunStatus = runeffect.Status

const (
	RunStatusRunning      = manage.RunStatusRunning
	RunStatusRetryWaiting = manage.RunStatusRetryWaiting
	RunStatusSucceeded    = manage.RunStatusSucceeded
	RunStatusFailed       = manage.RunStatusFailed
)

type FailureCode = manage.FailureCode

const (
	FailureCodeOwnerMembershipLost      = manage.FailureCodeOwnerMembershipLost
	FailureCodeTargetNotFound           = manage.FailureCodeTargetNotFound
	FailureCodeForbiddenCurrentPerms    = manage.FailureCodeForbiddenCurrentPerms
	FailureCodeContentInvalid           = manage.FailureCodeContentInvalid
	FailureCodeTransientWriteError      = manage.FailureCodeTransientWriteError
	FailureCodeSourceKindNotEnabled     = manage.FailureCodeSourceKindNotEnabled
	FailureCodeTriggerNotActive         = manage.FailureCodeTriggerNotActive
	FailureCodeTriggerCompleted         = manage.FailureCodeTriggerCompleted
	FailureCodeInvalidTriggerDefinition = manage.FailureCodeInvalidTriggerDefinition
	FailureCodeProviderConnectionDown   = manage.FailureCodeProviderConnectionDown
)

type EventSubscriptionFilterInput = manage.EventSubscriptionFilterInput
type EventSubscriptionInput = manage.EventSubscriptionInput
type EventSubscriptionFilterView = manage.EventSubscriptionFilterView
type EventSubscriptionView = manage.EventSubscriptionView

type SourceInput = manage.SourceInput
type TargetInput = manage.TargetInput
type UpsertInput = manage.UpsertInput
type TargetView = manage.TargetView
type ValidationView = manage.ValidationView
type TriggerView = manage.TriggerView
type TriggerSummaryView = manage.TriggerSummaryView
type ValidateResult = manage.ValidateResult
type RunView = manage.RunView
type ListFilter = manage.ListFilter

const (
	DefaultListLimit = manage.DefaultListLimit
	MaxListLimit     = manage.MaxListLimit
)

// Keep imported legacy model symbols reachable for old compile-time interface
// assertions that named internal/trigger.AppPort with model.User.
var _ func(model.User) = func(model.User) {}
