package handlers import ( "html/template" "log" "marmic/servicetrade-toolbox/internal/api" "net/http" "strings" ) func InvoicesHandler(w http.ResponseWriter, r *http.Request) { session, ok := r.Context().Value("session").(*api.Session) if !ok { http.Error(w, "Unauthorized", http.StatusUnauthorized) return } // Handle the search request if r.Method == "GET" && r.URL.Query().Get("search") != "" { handleInvoiceSearch(w, r, session) return } // Handle the initial page load tmpl := template.Must(template.ParseFiles("templates/layout.html", "templates/invoices.html")) err := tmpl.Execute(w, nil) if err != nil { log.Printf("Error executing template: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } } func handleInvoiceSearch(w http.ResponseWriter, r *http.Request, session *api.Session) { searchTerm := strings.TrimSpace(r.URL.Query().Get("search")) if searchTerm == "" { log.Println("Empty search term, returning empty response") w.WriteHeader(http.StatusOK) return } invoice, err := session.GetInvoice(searchTerm) if err != nil { log.Printf("Error fetching invoice: %v", err) w.WriteHeader(http.StatusInternalServerError) tmpl := template.Must(template.ParseFiles("templates/partials/invoice_search_results.html")) tmpl.ExecuteTemplate(w, "invoice_search_results", map[string]interface{}{"Error": err.Error()}) return } tmpl := template.Must(template.ParseFiles("templates/partials/invoice_search_results.html")) err = tmpl.ExecuteTemplate(w, "invoice_search_results", invoice) if err != nil { log.Printf("Error executing template: %v", err) http.Error(w, "Internal Server Error", http.StatusInternalServerError) } }