package server

import (
	"fmt"
	"net/http"
	"reflect"
	"strconv"

	"github.com/gorilla/mux"
)

type Parms map[string]string

func (srv *DfServer) RegisterWorldPage(path string, template string, accessor func(Parms) any) {
	get := func(w http.ResponseWriter, r *http.Request) {
		if srv.context.world == nil {
			srv.renderLoading(w, r)
			return
		}

		params := mux.Vars(r)
		for k, v := range r.URL.Query() {
			params[k] = v[0]
		}

		data := accessor(params)
		if data == nil || (reflect.ValueOf(data).Kind() == reflect.Ptr && reflect.ValueOf(data).IsNil()) {
			srv.notFound(w)
			return
		}

		err := srv.templates.Render(w, template, data)
		if err != nil {
			fmt.Fprint(w, err)
			fmt.Println(err)
		}
	}

	srv.router.HandleFunc(path, get).Methods("GET")
}

func (srv *DfServer) RegisterWorldResourcePage(path string, template string, accessor func(int) any) {
	srv.RegisterWorldPage(path, template, func(params Parms) any {
		id, _ := strconv.Atoi(params["id"])
		return accessor(id)
	})
}
