package dto

import (
	"github.com/tidbcloud/account/central/utils"
	"github.com/tidbcloud/account/idl/pbgen/proto/account"
	"github.com/tidbcloud/account/idl/pbgen/proto/central"
	"github.com/tidbcloud/account/internel/dao/entity"
)

var UserStatusMap = map[entity.UserStatus]account.UserStatus{
	entity.UserStatusActive:        account.UserStatus_USER_STATUS_ACTIVE,
	entity.UserStatusPending:       account.UserStatus_USER_STATUS_PENDING,
	entity.UserStatusInactive:      account.UserStatus_USER_STATUS_INACTIVE,
	entity.UserStatusPendingSignup: account.UserStatus_USER_STATUS_PENDING_SIGNUP,
}

func ConvertUserProfile(user *entity.User, projects []entity.Project, org *entity.Tenant) *central.UserProfile {
	userProjects := []*central.UserProject{}
	for _, project := range projects {
		userProjects = append(userProjects, Project2UserProject(&project))
	}

	return &central.UserProfile{
		Id:          user.ID.Uint64(),
		Email:       user.Email,
		FirstName:   user.FirstName,
		LastName:    user.LastName,
		Role:        string(user.Role),
		Projects:    userProjects,
		PhoneNumber: user.PhoneNumber, //add by wangletian 2022-06-09
		Company:     org.Name,
		Country:     org.Country,
	}
}

func ConvertAccountUser(user *entity.User) *account.User {
	return &account.User{
		Id:          user.ID.Uint64(),
		CreatedAt:   utils.ToTimestamp(user.CreatedAt),
		UpdatedAt:   utils.ToTimestamp(user.UpdatedAt),
		DeletedAt:   utils.ToTimestamp(user.DeletedAt),
		FirstName:   user.FirstName,
		LastName:    user.LastName,
		Email:       user.Email,
		Status:      UserStatusMap[user.Status],
		InvitedAt:   utils.ToTimestamp(user.InvitedAt),
		Job:         user.Job,
		PhoneNumber: user.PhoneNumber,
	}
}

func ConvertAccountUsers(users []entity.User) []*account.User {
	result := make([]*account.User, len(users))
	for i, user := range users {
		result[i] = ConvertAccountUser(&user)
	}

	return result
}
