package dto

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

func ConvertAccountProject(project *entity.Project) *account.Project {
	pType := account.ProjectType_PROJECT_TYPE_UNSPECIFIED
	if project.Type == entity.ProjectTypeDedicated {
		pType = account.ProjectType_PROJECT_TYPE_DEDICATED
	} else if project.Type == entity.ProjectTypeTiDBX {
		pType = account.ProjectType_PROJECT_TYPE_TIDBX
	} else if project.Type == entity.ProjectTypeTiDBXVirtual {
		pType = account.ProjectType_PROJECT_TYPE_TIDBXVIRTUAL
	}

	return &account.Project{
		Id:             project.ID.Uint64(),
		CreatedAt:      utils.ToTimestamp(project.CreatedAt),
		UpdatedAt:      utils.ToTimestamp(project.UpdatedAt),
		TenantId:       project.TenantID.Uint64(),
		Name:           project.Name,
		Status:         string(project.Status),
		DeletedAt:      utils.ToTimestamp(project.DeletedTime),
		IsCrossAccount: project.IsCrossAccount,
		AwsCmekEnabled: project.AwsCmekEnabled,
		Type:           pType,
	}
}

func ConvertAccountProjects(projects []entity.Project) []*account.Project {
	result := make([]*account.Project, len(projects))

	for i, p := range projects {
		result[i] = ConvertAccountProject(&p)
	}

	return result
}

func ConvertOrgProjects(orgProjects project.OrgProjects) *account.OrgProject {
	result := &account.OrgProject{
		OrgId:    orgProjects.OrgID,
		Projects: ConvertAccountProjects(orgProjects.Projects),
	}

	return result
}

func ConvertOrgProjectsList(orgProjectsList []project.OrgProjects) []*account.OrgProject {
	result := make([]*account.OrgProject, len(orgProjectsList))
	for i, p := range orgProjectsList {
		result[i] = ConvertOrgProjects(p)
	}

	return result
}
