package handlers import ( "database/sql" "log" "net/http" httpHelpers "synlotto-website/helpers/http" templateHelpers "synlotto-website/helpers/template" "synlotto-website/models" ) func NewDrawHandler(db *sql.DB) http.HandlerFunc { return httpHelpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { data := models.TemplateData{} context := templateHelpers.TemplateContext(w, r, data) if r.Method == http.MethodPost { game := r.FormValue("game_type") date := r.FormValue("draw_date") machine := r.FormValue("machine") ballset := r.FormValue("ball_set") _, err := db.Exec(`INSERT INTO results_thunderball (game_type, draw_date, machine, ball_set) VALUES (?, ?, ?, ?)`, game, date, machine, ballset) if err != nil { http.Error(w, "Failed to add draw", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } tmpl := templateHelpers.LoadTemplateFiles("new_draw", "templates/admin/draws/new_draw.html") tmpl.ExecuteTemplate(w, "layout", context) }) } func ModifyDrawHandler(db *sql.DB) http.HandlerFunc { return httpHelpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { id := r.FormValue("id") _, err := db.Exec(`UPDATE results_thunderball SET game_type=?, draw_date=?, ball_set=?, machine=? WHERE id=?`, r.FormValue("game_type"), r.FormValue("draw_date"), r.FormValue("ball_set"), r.FormValue("machine"), id) if err != nil { http.Error(w, "Update failed", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } // For GET: load draw by ID (pseudo-code) // id := r.URL.Query().Get("id") // query DB, pass into context.Draw }) } func DeleteDrawHandler(db *sql.DB) http.HandlerFunc { return httpHelpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { if r.Method == http.MethodPost { id := r.FormValue("id") _, err := db.Exec(`DELETE FROM results_thunderball WHERE id = ?`, id) if err != nil { http.Error(w, "Delete failed", http.StatusInternalServerError) return } http.Redirect(w, r, "/admin/dashboard", http.StatusSeeOther) return } }) } func ListDrawsHandler(db *sql.DB) http.HandlerFunc { return httpHelpers.AuthMiddleware(func(w http.ResponseWriter, r *http.Request) { data := models.TemplateData{} context := templateHelpers.TemplateContext(w, r, data) draws := []models.DrawSummary{} rows, err := db.Query(` SELECT r.id, r.game_type, r.draw_date, r.ball_set, r.machine, (SELECT COUNT(1) FROM prizes_thunderball p WHERE p.draw_date = r.draw_date) as prize_exists FROM results_thunderball r ORDER BY r.draw_date DESC `) if err != nil { http.Error(w, "Failed to query draws", http.StatusInternalServerError) return } defer rows.Close() for rows.Next() { var d models.DrawSummary var prizeFlag int if err := rows.Scan(&d.Id, &d.GameType, &d.DrawDate, &d.BallSet, &d.Machine, &prizeFlag); err != nil { log.Println("⚠️ Draw scan failed:", err) continue } d.PrizeSet = prizeFlag > 0 draws = append(draws, d) } context["Draws"] = draws tmpl := templateHelpers.LoadTemplateFiles("list.html", "templates/admin/draws/list.html") tmpl.ExecuteTemplate(w, "layout", context) }) }