package app

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

// CheckAPIUser authenticates a User with the auth service
//
// When called, ChechAPIUser assumes there is an "auth" service account in the
// app configuration file.
func CheckAPIUser(token *string) (*User, error) {
	sugar.Debug("app.CheckAPIUser: 📥")
	if authUser == nil {
		authUser = &User{
			APIKey: GetServiceAccount("auth").APIKey,
			Auth: httptransport.APIKeyAuth(
				"X-API-Key",
				"header",
				GetServiceAccount("auth").APIKey,
			),
		}
	}
	params := user.NewGetUsersParams()
	params.Apikey = token
	response, err := authClient.User.GetUsers(params, authUser.Auth)
	if err != nil {
		sugar.Warnf("app.CheckAPIUser: ❗ Access attempt with invalid API key: %s", *token)
		return nil, err
	}
	var obj *auth_models.User
	for _, itm := range response.Payload.Data { // single iteration execution
		obj = itm
	}
	sugar.Debugf("app.CheckAPIUser: 📤 👍 ID = %s, Name = %s", obj.ID, obj.Name)
	return MarshalAuthUserToSwagger(obj), nil
}
