package router

import (
	"fmt"
	"net"

	"github.com/go-gost/core/router"
	"github.com/vishvananda/netlink"
)

// setSysRoutes applies the given routes as system-level network routes using netlink.
func (p *localRouter) setSysRoutes(routes ...*router.Route) error {
	for _, route := range routes {
		if route.Net == nil {
			continue
		}
		gw := net.ParseIP(route.Gateway)
		if gw == nil {
			continue
		}

		p.options.logger.Debugf("ip route replace %s via %s", route.Net, route.Gateway)
		r := netlink.Route{
			Dst: route.Net,
			Gw:  gw,
		}
		if err := netlink.RouteReplace(&r); err != nil {
			return fmt.Errorf("set route %v %v: %v", r.Dst, r.Gw, err)
		}

	}
	return nil
}
