package handlers import ( "net/http" "strconv" "time" "task-dashboard/internal/models" ) // HandleTimeline renders the timeline view func (h *Handler) HandleTimeline(w http.ResponseWriter, r *http.Request) { // Parse query params startStr := r.URL.Query().Get("start") daysStr := r.URL.Query().Get("days") var start time.Time if startStr != "" { parsed, err := time.ParseInLocation("2006-01-02", startStr, time.Local) if err == nil { start = parsed } else { start = time.Now() } } else { start = time.Now() } // Normalize start to beginning of day start = time.Date(start.Year(), start.Month(), start.Day(), 0, 0, 0, 0, start.Location()) days := 3 // Default if daysStr != "" { if d, err := strconv.Atoi(daysStr); err == nil && d > 0 { days = d } } end := start.AddDate(0, 0, days) // Call BuildTimeline items, err := BuildTimeline(r.Context(), h.store, h.googleCalendarClient, start, end) if err != nil { JSONError(w, http.StatusInternalServerError, "Failed to build timeline", err) return } data := struct { Items []models.TimelineItem Start time.Time Days int }{ Items: items, Start: start, Days: days, } HTMLResponse(w, h.templates, "timeline-tab", data) }