package app

import (
	"context"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
	"github.com/tidbcloud/AgentTeam/internal/store/agent"
)

type ProviderWatchTarget = ServiceEventTarget

func resolveProviderWatchAgentChannelTarget(ctx context.Context, queryer coredb.QueryExecer, authenticatedAgent agent.AuthenticatedAgent, target string) (string, error) {
	return resolveServiceEventAgentChannelTarget(ctx, queryer, authenticatedAgent, target)
}

func resolveProviderWatchAgentReplyThreadTarget(ctx context.Context, queryer coredb.Queryer, authenticatedAgent agent.AuthenticatedAgent, target string) (string, error) {
	return resolveServiceEventAgentReplyThreadTarget(ctx, queryer, authenticatedAgent, target)
}

func resolveProviderWatchAgentEntryChannel(ctx context.Context, queryer coredb.QueryRower, workspaceID string, agentMemberID string, channelSlug string) (string, error) {
	return resolveServiceEventAgentEntryChannel(ctx, queryer, workspaceID, agentMemberID, channelSlug)
}

func ResolveProviderWatchTargetForScope(ctx context.Context, queryer coredb.Queryer, workspaceID string, actorMemberID string, targetScopeID string) (ProviderWatchTarget, error) {
	return ResolveServiceEventTargetForScope(ctx, queryer, workspaceID, actorMemberID, targetScopeID)
}

func parseProviderWatchTaskTarget(target string) (string, bool) {
	return parseServiceEventTaskTarget(target)
}

func parseProviderWatchTaskChannelNumberTarget(taskSpec string) (string, int64, bool) {
	return parseServiceEventTaskChannelNumberTarget(taskSpec)
}

func resolveProviderWatchTaskTargetByID(ctx context.Context, queryer coredb.QueryRower, workspaceID string, actorMemberID string, taskID string) (ProviderWatchTarget, error) {
	return resolveServiceEventTaskTargetByID(ctx, queryer, workspaceID, actorMemberID, taskID)
}

func resolveProviderWatchTaskTargetByChannelNumber(ctx context.Context, queryer coredb.QueryRower, workspaceID string, actorMemberID string, channelID string, taskNumber int64) (ProviderWatchTarget, error) {
	return resolveServiceEventTaskTargetByChannelNumber(ctx, queryer, workspaceID, actorMemberID, channelID, taskNumber)
}

func resolveProviderWatchTaskTarget(ctx context.Context, queryer coredb.QueryRower, workspaceID string, actorMemberID string, taskID string, channelID string, taskNumber int64) (ProviderWatchTarget, error) {
	return resolveServiceEventTaskTarget(ctx, queryer, workspaceID, actorMemberID, taskID, channelID, taskNumber)
}

func resolveProviderWatchReplyThread(ctx context.Context, queryer coredb.Queryer, workspaceID string, actorMemberID string, threadChannelID string) (ProviderWatchTarget, error) {
	return resolveServiceEventReplyThread(ctx, queryer, workspaceID, actorMemberID, threadChannelID)
}

func resolveProviderWatchDM(ctx context.Context, queryer coredb.QueryRower, workspaceID string, actorMemberID string, dmThreadID string) (ProviderWatchTarget, error) {
	return resolveServiceEventDM(ctx, queryer, workspaceID, actorMemberID, dmThreadID)
}

func requireProviderWatchDMParticipant(ctx context.Context, queryer coredb.QueryRower, workspaceID string, actorMemberID string, dmThreadID string) error {
	return requireServiceEventDMParticipant(ctx, queryer, workspaceID, actorMemberID, dmThreadID)
}
