package test

import (
	"context"

	"github.com/aws/aws-sdk-go-v2/aws"
	awsvpcpeeringv1alpha1 "github.com/crossplane/provider-aws/apis/vpcpeering/v1alpha1"
	"k8s.io/apimachinery/pkg/runtime"
	ctrl "sigs.k8s.io/controller-runtime"
	"sigs.k8s.io/controller-runtime/pkg/client"
)

type MockAwsVpcPeerReconciler struct {
	client.Client
	Scheme *runtime.Scheme
}

func NewMockAwsVpcPeerReconciler(mgr ctrl.Manager) *MockAwsVpcPeerReconciler {
	return &MockAwsVpcPeerReconciler{
		Client: mgr.GetClient(),
		Scheme: mgr.GetScheme(),
	}
}

func (r *MockAwsVpcPeerReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
	awsvpcpeering := &awsvpcpeeringv1alpha1.VPCPeeringConnection{}
	err := r.Get(ctx, req.NamespacedName, awsvpcpeering)
	if err != nil {
		return ctrl.Result{}, client.IgnoreNotFound(err)
	}
	awsvpcpeering.Status.AtProvider.VPCPeeringConnectionID = aws.String("pcx-07e816c4e3f3c5ff5")
	vpcInfo := &awsvpcpeeringv1alpha1.VPCPeeringConnectionVPCInfo{
		CIDRBlock: aws.String("10.1.0.0/16"),
	}
	awsvpcpeering.Status.AtProvider.RequesterVPCInfo = vpcInfo
	return ctrl.Result{}, r.Client.Status().Update(ctx, awsvpcpeering)
}

func (r *MockAwsVpcPeerReconciler) SetupWithManager(mgr ctrl.Manager) error {
	return ctrl.NewControllerManagedBy(mgr).
		For(&awsvpcpeeringv1alpha1.VPCPeeringConnection{}).
		Complete(r)
}
