package jobs

import (
	"context"
	"os"
	"time"

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

	"go.uber.org/zap"
)

// CleanupHLSSegments nettoie les segments HLS obsolètes
// T0338: Nettoie les segments de tracks supprimés et les segments orphelins
func CleanupHLSSegments(db *database.Database, logger *zap.Logger) error {
	ctx := context.Background()

	// Récupérer le répertoire de sortie HLS depuis la config ou un défaut
	hlsOutputDir := os.Getenv("HLS_OUTPUT_DIR")
	if hlsOutputDir == "" {
		hlsOutputDir = "hls_output"
	}

	// Créer le service de cleanup
	cleanupService := services.NewHLSCleanupService(db.GormDB, hlsOutputDir, logger)

	// Exécuter le nettoyage
	if err := cleanupService.CleanupAll(ctx); err != nil {
		logger.Error("Failed to cleanup HLS segments", zap.Error(err))
		return err
	}

	logger.Info("HLS segments cleanup completed successfully")
	return nil
}

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

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