package tenant

import (
	"github.com/tidbcloud/debug_portal/db"
	"github.com/tidbcloud/debug_portal/db/entity"

	"gorm.io/gorm"
)

type User struct {
	entity.User
	TenantID       entity.ID
	IsImpersonated bool
}

func GetUser(email string) (*User, bool) {
	var dbUser entity.User
	err := db.Transaction(func(tx *gorm.DB) error {
		return entity.NewUserQuerySet(tx.Preload("Roles").Preload("Projects")).EmailEq(email).PreloadTenant().One(&dbUser)
	})
	if err != nil {
		return nil, false
	}

	activeProjects := []entity.Project{}
	for _, p := range dbUser.Projects {
		if p.Status == entity.ProjectStatusActive {
			activeProjects = append(activeProjects, p)
		}
	}
	dbUser.Projects = activeProjects

	return &User{
		User:           dbUser,
		TenantID:       dbUser.TenantID,
		IsImpersonated: false,
	}, true
}
