package app

import (
	"code.tnxs.net/vernonkeenan/lib/api/auth/auth_models"
	httptransport "github.com/go-openapi/runtime/client"
)

// MarshalAuthUserToSwagger is a helper function
func MarshalAuthUserToSwagger(obj *auth_models.User) *User {
	var address *Address
	if obj.Address != nil {
		address = &Address{
			City:        obj.Address.City,
			Country:     obj.Address.Country,
			CountryCode: obj.Address.CountryCode,
			PostalCode:  obj.Address.PostalCode,
			State:       obj.Address.State,
			StateCode:   obj.Address.StateCode,
			Street:      obj.Address.Street,
		}
	}
	var userRoles []*UserRole
	if obj.UserRoles != nil {
		userRoles = []*UserRole{}
		for _, itm := range obj.UserRoles {
			userRoles = append(userRoles, reMarshalUserRole(itm))
		}
	}
	var tenantUsers []*TenantUser
	if obj.TenantUsers != nil {
		tenantUsers = []*TenantUser{}
		for _, itm := range obj.TenantUsers {
			tenantUsers = append(tenantUsers, reMarshalTenantUser(itm))
		}
	}
	return &User{
		ID:                      obj.ID,
		AboutMe:                 obj.AboutMe,
		AccountID:               obj.AccountID,
		Address:                 address,
		Alias:                   obj.Alias,
		APIKey:                  obj.APIKey,
		Auth:                    httptransport.APIKeyAuth("X-API-Key", "header", obj.APIKey),
		Auth0UserID:             obj.Auth0UserID,
		CommunityNickname:       obj.CommunityNickname,
		CompanyName:             obj.CompanyName,
		ContactID:               obj.ContactID,
		CreatedByID:             obj.CreatedByID,
		CreatedDate:             obj.CreatedDate,
		DelegatedApproverID:     obj.DelegatedApproverID,
		Department:              obj.Department,
		Division:                obj.Division,
		Email:                   obj.Email,
		EmployeeNumber:          obj.EmployeeNumber,
		EndOfDay:                obj.EndOfDay,
		Environment:             obj.Environment,
		Extension:               obj.Extension,
		FabricAPIKey:            obj.FabricAPIKey,
		Fax:                     obj.Fax,
		FirstName:               obj.FirstName,
		ForecastEnabled:         obj.ForecastEnabled,
		FullPhotoURL:            obj.FullPhotoURL,
		IsActive:                obj.IsActive,
		IsPortalEnabled:         obj.IsPortalEnabled,
		IsProfilePhotoActive:    obj.IsProphilePhotoActive,
		IsSystemControlled:      obj.IsSystemControlled,
		LastIP:                  obj.LastIP,
		LastLogin:               obj.LastLogin,
		LastModifiedByID:        obj.LastModifiedByID,
		LastModifiedDate:        obj.LastModifiedDate,
		LastName:                obj.LastName,
		LoginCount:              obj.LoginCount,
		ManagerID:               obj.ManagerID,
		MobilePhone:             obj.MobilePhone,
		Name:                    obj.Name,
		OutOfOfficeMessage:      obj.OutOfOfficeMessage,
		Phone:                   obj.Phone,
		PortalRole:              obj.PortalRole,
		PrincipalKey:            obj.PrincipalKey,
		PrincipalType:           obj.PrincipalType,
		ProfileID:               obj.ProfileID,
		ReceivesAdminEmails:     obj.ReceivesAdminEmails,
		ReceivesAdminInfoEmails: obj.ReceivesAdminInfoEmails,
		SenderEmail:             obj.SenderEmail,
		SenderName:              obj.SenderName,
		Signature:               obj.Signature,
		Scopes:                  append([]string(nil), obj.Scopes...),
		SmallPhotoURL:           obj.SmallPhotoURL,
		StartOfDay:              obj.StartOfDay,
		ExternalAccount:         obj.ExternalAccount,
		TenantID:                obj.TenantID,
		TenantUsers:             tenantUsers,
		TimeZone:                obj.TimeZone,
		Title:                   obj.Title,
		Username:                obj.Username,
		UserRoleID:              obj.UserRoleID,
		UserRoles:               userRoles,
		UserType:                obj.UserType,
	}
}
func reMarshalUserRole(s *auth_models.UserRole) *UserRole {
	return &UserRole{
		AccountID:       s.AccountID,
		Auth0RoleID:     s.Auth0RoleID,
		Auth0UserID:     s.Auth0UserID,
		CompanyName:     s.CompanyName,
		ContactID:       s.ContactID,
		RoleDescription: s.RoleDescription,
		RoleID:          s.RoleID,
		RoleName:        s.RoleName,
		ExternalAccount: s.ExternalAccount,
		UserEmail:       s.UserEmail,
		UserFullName:    s.UserFullName,
		UserID:          s.UserID,
		Username:        s.Username,
	}
}
func reMarshalTenantUser(s *auth_models.TenantUser) *TenantUser {
	return &TenantUser{
		AccessLevel:     s.AccessLevel,
		AccountID:       s.AccountID,
		Auth0UserID:     s.Auth0UserID,
		CompanyName:     s.CompanyName,
		ContactID:       s.ContactID,
		ExternalAccount: s.ExternalAccount,
		TenantActive:    s.TenantActive,
		TenantID:        s.TenantID,
		TenantName:      s.TenantName,
		TenantStatus:    s.TenantStatus,
		TenantType:      s.TenantType,
		TenantVersion:   s.TenantVersion,
		UserEmail:       s.UserEmail,
		UserFullName:    s.UserFullName,
		UserID:          s.UserID,
		Username:        s.Username,
	}
}
