package network

import (
	"github.com/docker/docker/api/server/router"
	"github.com/docker/docker/daemon/cluster"
)

// networkRouter is a router to talk with the network controller
type networkRouter struct {
	backend         Backend
	clusterProvider *cluster.Cluster
	routes          []router.Route
}

// NewRouter initializes a new network router
func NewRouter(b Backend, c *cluster.Cluster) router.Router {
	r := &networkRouter{
		backend:         b,
		clusterProvider: c,
	}
	r.initRoutes()
	return r
}

// Routes returns the available routes to the network controller
func (r *networkRouter) Routes() []router.Route {
	return r.routes
}

func (r *networkRouter) initRoutes() {
	r.routes = []router.Route{
		// GET
		router.NewGetRoute("/networks", r.getNetworksList),
		router.NewGetRoute("/networks/", r.getNetworksList),
		router.NewGetRoute("/networks/{id:.+}", r.getNetwork),
		// POST
		router.NewPostRoute("/networks/create", r.postNetworkCreate),
		router.NewPostRoute("/networks/{id:.*}/connect", r.postNetworkConnect),
		router.NewPostRoute("/networks/{id:.*}/disconnect", r.postNetworkDisconnect),
		router.NewPostRoute("/networks/prune", r.postNetworksPrune),
		// DELETE
		router.NewDeleteRoute("/networks/{id:.*}", r.deleteNetwork),
	}
}
