package lib

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

// RemoveIAMPolicyBinding removes a member from the specified role in the IAM policy.
func RemoveIAMPolicyBinding(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
	}

	for i, binding := range policy.Bindings {
		if binding.Role == role {
			for j, m := range binding.Members {
				if m == member {
					// Remove the member from the slice
					binding.Members = append(binding.Members[:j], binding.Members[j+1:]...)
					if len(binding.Members) == 0 {
						// Remove the binding if no members left
						policy.Bindings = append(policy.Bindings[:i], policy.Bindings[i+1:]...)
					}
					break
				}
			}
		}
	}

	_, err = service.Projects.SetIamPolicy(resource, &resourcemanager.SetIamPolicyRequest{
		Policy: policy,
	}).Do()
	if err != nil {
		return err
	}
	fmt.Println("Removed " + role + " for " + member + " IAM policy binding successfully.")
	return nil
}
