package lib

import (
	"context"
	"fmt"
	resourcemanager "google.golang.org/api/cloudresourcemanager/v3"
	"google.golang.org/api/option"
)

func CreateResourceManagerService(ctx context.Context) (*resourcemanager.Service, error) {
	return resourcemanager.NewService(ctx, option.WithScopes(resourcemanager.CloudPlatformScope))
}

// AddIAMPolicyBinding adds a new member to the specified role in the IAM policy.
func AddIAMPolicyBinding(ctx context.Context, service *resourcemanager.Service, projectID, member, role string) error {
	resource := "projects/" + projectID
	policy, err := service.Projects.GetIamPolicy(resource, &resourcemanager.GetIamPolicyRequest{}).Do()
	if err != nil {
		return err
	}

	found := false
	for _, binding := range policy.Bindings {
		if binding.Role == role {
			binding.Members = append(binding.Members, member)
			found = true
			break
		}
	}
	if !found {
		policy.Bindings = append(policy.Bindings, &resourcemanager.Binding{
			Role:    role,
			Members: []string{member},
		})
	}

	_, err = service.Projects.SetIamPolicy(resource, &resourcemanager.SetIamPolicyRequest{
		Policy: policy,
	}).Do()
	if err != nil {
		return err
	}

	fmt.Println("Added " + role + " for " + member + " IAM policy binding successfully.")
	return nil
}
