package main import ( "log" "net" "net/http" "os" "pdf-form-converter/db" "pdf-form-converter/handlers" "pdf-form-converter/llm" ) func main() { port := os.Getenv("PORT") if port == "" { port = "8080" } dbPath := os.Getenv("DB_PATH") if dbPath == "" { dbPath = "data/forms.db" } if err := os.MkdirAll("data", 0755); err != nil { log.Fatalf("failed to create data directory: %v", err) } database, err := db.New(dbPath) if err != nil { log.Fatalf("failed to open database: %v", err) } defer database.Close() var llmClient *llm.Client if os.Getenv("LLM_API_KEY") != "" { llmClient, err = llm.NewClient() if err != nil { log.Printf("warning: LLM client not configured: %v", err) } } adminHandler := handlers.NewAdminHandler(database, llmClient) formHandler := handlers.NewFormHandler(database) mux := http.NewServeMux() adminHandler.Register(mux) formHandler.Register(mux) // Static file serving mux.Handle("/static/public/", http.StripPrefix("/static/public/", http.FileServer(http.Dir("static/public")))) mux.Handle("/static/admin/", http.StripPrefix("/static/admin/", http.FileServer(http.Dir("static/admin")))) // Root redirect mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "static/public/index.html") }) addr := ":" + port log.Printf("Server starting on %s", addr) log.Printf("Admin: http://localhost%s/admin", addr) listener, err := net.Listen("tcp", addr) if err != nil { log.Fatalf("failed to listen: %v", err) } log.Fatal(http.Serve(listener, mux)) }