package main

import (
	"context"
	"flag"
	"io"
	"log"
	"net/http"
	"os"
	"os/signal"
	"plugin"

	unit "unit.nginx.org/go"
)

func main() {
	s := flag.String("mod", "", "path to module")
	flag.Parse()
	if *s == "" {
		flag.PrintDefaults()
		os.Exit(1)
	}

	p, err := plugin.Open(*s)
	if err != nil {
		log.Fatalf("could not load plugin: %s", err)
	}

	sym, err := p.Lookup("InitModule")
	if err != nil {
		log.Fatalf("could not find InitModule symbol: %s", err)
	}

	ctx, cancel := signal.NotifyContext(context.Background(), os.Interrupt)
	defer cancel()
	c, handler := sym.(func(context.Context) (io.Closer, http.Handler))(ctx)
	defer c.Close()
	log.Print("starting webserver")
	err = unit.ListenAndServe(":6969", handler)
	if err != nil {
		log.Fatalf("handling webserver: %s", err)
	}
}
