package privateagent

import (
	"context"
	"fmt"
	"strings"
	"time"

	"github.com/tidbcloud/AgentTeam/internal/store/message"
)

const (
	agentWakeStateAutoWake = "auto-wake"
	agentWakeStateNoWake   = "no-wake"
)

func normalizeAgentWakeState(state string) (string, error) {
	switch strings.TrimSpace(state) {
	case agentWakeStateAutoWake:
		return agentWakeStateAutoWake, nil
	case agentWakeStateNoWake:
		return agentWakeStateNoWake, nil
	default:
		return "", badRequest("wake state must be auto-wake or no-wake")
	}
}

func upsertAgentWakeStateWithExecer(ctx context.Context, execer commandTagExecer, memberID string, scopeID string, state string, updatedAt time.Time) error {
	trimmedMemberID := strings.TrimSpace(memberID)
	trimmedScopeID := strings.TrimSpace(scopeID)
	normalizedState, err := normalizeAgentWakeState(state)
	if err != nil {
		return err
	}
	actionAt := updatedAt.UTC()

	if err := message.UpsertScopeNotificationState(ctx, execer, trimmedMemberID, trimmedScopeID, normalizedState, actionAt); err != nil {
		return fmt.Errorf("upsert scope agent wake state: %w", err)
	}
	return nil
}
