package brass

import "net/http"

type App[DataType any, UserDataType any, StateType any] struct {
	LoadUserData func(data DataType, userID string) (UserDataType, bool)
	InitialState func(data UserDataType) StateType
	Render       func(data UserDataType, state StateType) View
	Functions    map[string]func(data DataType, state StateType, userID string, args []string) error
}

func (a *App[DataType, UserDataType, StateType]) Start(config *Config) http.Handler {
	s := &Server[DataType, UserDataType, StateType]{
		App:    a,
		Config: config,
	}
	return s.handler()
}
