package handlers import ( "database/sql" "html/template" "log" "net/http" helpers "synlotto-website/helpers" "synlotto-website/models" ) func AdminDashboardHandler(db *sql.DB) http.HandlerFunc { return helpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { // userID, ok := helpers.GetCurrentUserID(r) // if !ok { // http.Redirect(w, r, "/login", http.StatusSeeOther) // return // } // TODO: check is_admin from users table here context := helpers.TemplateContext(w, r) // Total ticket stats var total, winners int var prizeSum float64 db.QueryRow(`SELECT COUNT(*), SUM(CASE WHEN is_winner THEN 1 ELSE 0 END), SUM(prize_amount) FROM my_tickets`).Scan(&total, &winners, &prizeSum) context["Stats"] = map[string]interface{}{ "TotalTickets": total, "TotalWinners": winners, "TotalPrizeAmount": prizeSum, } // Match run log rows, err := db.Query(` SELECT run_at, triggered_by, tickets_matched, winners_found, COALESCE(notes, '') FROM log_ticket_matching ORDER BY run_at DESC LIMIT 10 `) if err != nil { log.Println("⚠️ Failed to load logs:", err) } defer rows.Close() var logs []models.MatchLog for rows.Next() { var logEntry models.MatchLog err := rows.Scan(&logEntry.RunAt, &logEntry.TriggeredBy, &logEntry.TicketsMatched, &logEntry.WinnersFound, &logEntry.Notes) if err != nil { log.Println("⚠️ Failed to scan log row:", err) continue } logs = append(logs, logEntry) } context["MatchLogs"] = logs tmpl := template.Must(template.New("").Funcs(helpers.TemplateFuncs()).ParseFiles( "templates/layout.html", "templates/admin/dashboard.html", )) err = tmpl.ExecuteTemplate(w, "layout", context) if err != nil { http.Error(w, "Failed to render dashboard", http.StatusInternalServerError) } }) }