import { User } from '@prisma/client'
import { appLogger } from '#utilities/logger'

type TLoggedInUsers = {
  users: User[]
}

class UserManager {
  private loggedInUsers: TLoggedInUsers[] = []

  // Method to initialize user manager
  public async boot() {
    appLogger.info('User manager loaded')
  }

  // Function that adds user to logged in users
  public loginUser(user: User) {
    this.loggedInUsers.push({
      users: [user]
    })
  }

  // Function that checks if a user is already logged in
  public findUser(user: User) {
    return this.loggedInUsers.find((loggedInUser) => {
      return loggedInUser.users.includes(user)
    })
  }

  // Function that lists all logged in users
  public listUsers() {
    return this.loggedInUsers.map((loggedInUser) => {
      return loggedInUser.users
    })
  }
}

export default new UserManager()