package main

import (
	"context"
	"fmt"
	"log"
	"main/cfg"
	"main/lib"

	resourcemanager "google.golang.org/api/cloudresourcemanager/v3"
	"google.golang.org/api/option"
)

func main() {
	ctx := context.Background()
	service, err := resourcemanager.NewService(ctx, option.WithCredentialsFile(cfg.CredentialFile))
	if err != nil {
		log.Fatalf("Failed to create resource manager service: %v", err)
	}

	projectID := "dbaas-prod"          // 替换为你的 GCP 项目 ID
	email := "yunjie.xiao@pingcap.com" // 替换为你的邮箱地址
	member := "user:" + email
	role := "roles/bigquery.admin" // 授予的角色

	// 获取当前的 IAM 政策
	resource := "projects/" + projectID
	policy, err := service.Projects.GetIamPolicy(resource, &resourcemanager.GetIamPolicyRequest{}).Do()
	if err != nil {
		log.Fatalf("Failed to get IAM policy: %v", 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 = lib.AddIAMPolicyBinding(ctx, service, projectID, member, role)
	err = lib.RemoveIAMPolicyBinding(ctx, service, projectID, member, role)
	user, err := lib.ListAllUsers(ctx, service, projectID)
	roles, err := lib.GetUserRoles(ctx, service, projectID, email)

	if err != nil {
		log.Fatalf("Failed: %v", err)
	}
	fmt.Println(user)
	fmt.Println(roles)
}
