package middleware import ( "fmt" "gestion/db" "gestion/models" "log" "net/http" "time" "github.com/gin-gonic/gin" ) func OrderHoursMiddleware(c *gin.Context) { loc, err := time.LoadLocation("Europe/Paris") if err != nil { loc = time.UTC } now := time.Now().In(loc) weekday := now.Weekday() hour := now.Hour() min := now.Minute() database := c.MustGet("database").(*db.Database) settings, err := database.GetSettings() if err != nil { log.Printf("⚠️ [CLOCK-MWARE] Erreur lecture settings: %v — accès autorisé par défaut", err) c.Next() return } sched := settings.DeliverySchedule var day models.DaySchedule switch weekday { case time.Monday: day = sched.Monday case time.Tuesday: day = sched.Tuesday case time.Wednesday: day = sched.Wednesday case time.Thursday: day = sched.Thursday case time.Friday: day = sched.Friday case time.Saturday: day = sched.Saturday case time.Sunday: day = sched.Sunday } if !day.Enabled { log.Printf("❌ [CLOCK-MWARE] Commande refusée — jour fermé (%s)", weekday) c.JSON(http.StatusForbidden, gin.H{ "error": "Commandes non disponibles aujourd'hui", "message": "La livraison n'est pas disponible ce jour", "current_time": now.Format("15:04"), }) c.Abort() return } parseTime := func(t string) int { var h, m int fmt.Sscanf(t, "%d:%d", &h, &m) return h*60 + m } currentMinutes := hour*60 + min openMinutes := parseTime(day.OpenTime) closeMinutes := parseTime(day.CloseTime) if currentMinutes < openMinutes || currentMinutes >= closeMinutes { log.Printf("❌ [CLOCK-MWARE] Commande refusée à %02d:%02d (plage autorisée: %s - %s)", hour, min, day.OpenTime, day.CloseTime) c.JSON(http.StatusForbidden, gin.H{ "error": "Commandes non disponibles à cette heure", "message": fmt.Sprintf("Vous pouvez commander entre %s et %s", day.OpenTime, day.CloseTime), "current_time": now.Format("15:04"), "open_at": day.OpenTime, "close_at": day.CloseTime, }) c.Abort() return } log.Printf("✅ [CLOCK-MWARE] Commande autorisée à %02d:%02d", hour, min) c.Next() }