package jobs

import (
	"context"
	"time"

	"veza-backend-api/internal/database"
	"veza-backend-api/internal/services"

	"go.uber.org/zap"
)

// CleanupExpiredSessions supprime les sessions expirées
// T0208: Supprime les sessions avec expires_at < NOW()
func CleanupExpiredSessions(db *database.Database, logger *zap.Logger) error {
	// Créer SessionService pour utiliser la méthode existante
	sessionService := services.NewSessionService(db, logger)

	// Cleanup expired sessions
	if err := sessionService.CleanupExpiredSessions(context.Background()); err != nil {
		logger.Error("Failed to cleanup expired sessions", zap.Error(err))
		return err
	}

	// Note: The service already logs the number of cleaned sessions
	return nil
}

// ScheduleSessionCleanupJob programme le job de nettoyage des sessions pour s'exécuter quotidiennement
// T0208: Lance une goroutine qui exécute le nettoyage toutes les 24 heures
func ScheduleSessionCleanupJob(db *database.Database, logger *zap.Logger) {
	ticker := time.NewTicker(24 * time.Hour)
	go func() {
		// Exécuter immédiatement au démarrage
		if err := CleanupExpiredSessions(db, logger); err != nil {
			logger.Error("Initial sessions cleanup job failed", zap.Error(err))
		}

		// Puis exécuter toutes les 24 heures
		for range ticker.C {
			if err := CleanupExpiredSessions(db, logger); err != nil {
				logger.Error("Scheduled sessions cleanup job failed", zap.Error(err))
			}
		}
	}()
	logger.Info("Sessions cleanup job scheduled to run daily")
}
