package main

import (
	"context"
	"fmt"
	"time"

	pb "code.hackerspace.pl/hscloud/bgpwtf/cccampix/proto"
	"code.hackerspace.pl/hscloud/bgpwtf/cccampix/verifier/model"
	"code.hackerspace.pl/hscloud/go/pki"
	"google.golang.org/grpc"
)

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, lastFailed bool) time.Time {
	if lastFailed {
		return now.Add(1 * time.Minute)
	}
	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
}
