// Package web serves the laundry status API and embedded phone-first page. package web import ( _ "embed" "encoding/json" "net/http" "mqtt_washingmachine/internal/status" ) //go:embed static/index.html var indexHTML []byte // NewHandler fetches a fresh snapshot for each API request. Disabling caching // keeps reloads and polling from showing a previous laundry state. func NewHandler(snapshot func() status.Result) http.Handler { mux := http.NewServeMux() mux.HandleFunc("GET /{$}", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "text/html; charset=utf-8") w.Header().Set("Cache-Control", "no-store") w.Write(indexHTML) }) mux.HandleFunc("GET /api/status", func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.Header().Set("Cache-Control", "no-store") json.NewEncoder(w).Encode(snapshot()) }) return mux }