package executor

import (
	"context"

	"go.uber.org/zap"
)

func (e *Executor) maybePrewarmPrepared(ctx context.Context, user, password string, prepared *PreparedStatement) {
	if e == nil || !e.preparedCache.enabled || !e.preparedCache.prewarm {
		return
	}
	if e.poolManager == nil || prepared == nil {
		return
	}
	if prepared.IsSpecialQuery || prepared.IsSetKeyspace {
		return
	}
	if prepared.SQL == "" {
		return
	}
	if prepared.SelectLimit != nil {
		return
	}
	if !prepared.IsSelect {
		if prepared.DMLPlan == nil || prepared.DMLPlan.condition.kind != dmlConditionNone {
			return
		}
	}

	pool, err := e.poolManager.GetPool(user, password)
	if err != nil {
		e.logger.Debug("prepared cache prewarm skipped: pool unavailable", zap.Error(err))
		return
	}
	if _, err := pool.PrepareCached(ctx, prepared.SQL); err != nil {
		e.logger.Debug("prepared cache prewarm failed", zap.Error(err))
	}
}
