1package compute
2
3import (
4	"fmt"
5	"strings"
6
7	"github.com/genevieve/leftovers/common"
8	gcpcompute "google.golang.org/api/compute/v1"
9)
10
11type urlMapsClient interface {
12	ListUrlMaps() (*gcpcompute.UrlMapList, error)
13	DeleteUrlMap(urlMap string) error
14}
15
16type UrlMaps struct {
17	client urlMapsClient
18	logger logger
19}
20
21func NewUrlMaps(client urlMapsClient, logger logger) UrlMaps {
22	return UrlMaps{
23		client: client,
24		logger: logger,
25	}
26}
27
28func (u UrlMaps) List(filter string) ([]common.Deletable, error) {
29	urlMaps, err := u.client.ListUrlMaps()
30	if err != nil {
31		return nil, fmt.Errorf("List Url Maps: %s", err)
32	}
33
34	var resources []common.Deletable
35
36	for _, urlMap := range urlMaps.Items {
37		resource := NewUrlMap(u.client, urlMap.Name)
38
39		if !strings.Contains(resource.Name(), filter) {
40			continue
41		}
42
43		proceed := u.logger.PromptWithDetails(resource.Type(), resource.Name())
44		if !proceed {
45			continue
46		}
47
48		resources = append(resources, resource)
49	}
50
51	return resources, nil
52}
53
54func (u UrlMaps) Type() string {
55	return "url-map"
56}
57