package llm

import (
	"context"
	"time"
)

// VoiceInterval is the minimum gap between voice-consistency passes for one
// document. The pass is whole-document and slow, and it runs on an explicit
// user action rather than a typing cadence, so this floor only guards the
// inference endpoint against the button being mashed.
const VoiceInterval = 20 * time.Second

// RunVoice sends the WHOLE document — deliberately NOT TruncateDoc'd, since
// voice consistency is judged against the established voice everywhere else —
// for a Tier-1 voice pass and parses the JSON result. It reuses the checkpoint's
// tolerant parser and a larger token budget, since one pass may flag several
// passages. Each flag carries a null replacement (awareness-only).
// The tone argument is accepted for a uniform pass signature but ignored: voice
// consistency is judged against the document's own established voice, not an
// externally-chosen register.
func RunVoice(ctx context.Context, client LLMClient, contentText, _ string) ([]RawSuggestion, error) {
	raw, err := client.Complete(ctx, CompletionRequest{
		Messages:          VoiceMessages(contentText),
		MaxTokens:         2048,
		Temperature:       0.3,
		RepetitionPenalty: 1.15,
		TopP:              0.9,
		Stop:              []string{"```", "\n\n\n\n"},
	})
	if err != nil {
		return nil, err
	}
	return ParseCheckpoint(raw)
}
