package main

import (
	"context"
	"fmt"
	"time"

	"code.hackerspace.pl/hscloud/go/pki"
	"google.golang.org/grpc"

	pb "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto"
	"code.hackerspace.pl/hscloud/bgpwtf/cccampix/verifier/model"
)

type peeringDB struct {
	pdb pb.PeeringDBProxyClient
}

func newPeeringDB(addr string) (processor, error) {
	conn, err := grpc.Dial(addr, pki.WithClientHSPKI())
	if err != nil {
		return nil, fmt.Errorf("could not connect to peeringdb service: %v", err)
	}

	return &peeringDB{
		pdb: pb.NewPeeringDBProxyClient(conn),
	}, nil
}

func (p *peeringDB) Name() string {
	return "PeeringDB"
}

func (p *peeringDB) NextRun(now time.Time) time.Time {
	return now.Add(5 * time.Minute)
}

func (p *peeringDB) RunAll(ctx context.Context, m model.Model) error {
	id := int64(2641)
	req := &pb.GetIXMembersRequest{
		Id: id,
	}

	res, err := p.pdb.GetIXMembers(ctx, req)
	if err != nil {
		return fmt.Errorf("GetIXMembers(%d): %v", id, err)
	}

	err = m.RecordPeeringDBPeers(ctx, res.Members)
	if err != nil {
		return fmt.Errorf("RecordPeeringDBPeers: %v", err)
	}
	err = m.RecordPeeringDBPeerRouters(ctx, res.Members)
	if err != nil {
		return fmt.Errorf("RecordPeeringDBPeerRouters: %v", err)
	}
	return nil
}
