package cactusServer.models;
import javax.inject.Singleton;
import cactusServer.entities.*;
import cactusServer.utils.RandomStringGenerator;
import java.net.URI;
import java.util.*;
@Singleton
public class Accounts {
private static Accounts theInstance = null;
private ArrayList<Account> accounts = new ArrayList<>(10000);
private HashSet<String> userIDSet = new HashSet<>(10000);
private HashSet<String> uniqueIDSet = new HashSet<>(10000);
private Session session;
private Accounts() {
}
public static Accounts getInstance() {
if (theInstance == null) {
theInstance = new Accounts();
}
return theInstance;
}
public Session createAcount(String userID, String userName, String userPass) {
if (!userIDSet.add(userID))
return null;
String uniqueID = RandomStringGenerator.generateUniqueString(12, RandomStringGenerator.ALPHA_NUMERIC,
uniqueIDSet);
uniqueIDSet.add(uniqueID);
Account newAccount = new Account(userID, userName, userPass, uniqueID);
accounts.add(newAccount);
session = new Session(newAccount, URI.create("/CactusServer/rest/accounts/" + uniqueID));
return session;
}
public Account getAccountToken(String token) {
Account editAccount;
for (int i = 0; i < accounts.size(); i++) {
editAccount = accounts.get(i);
if (editAccount.getToken().equals(token)) {
return editAccount;
}
}
return null;
}
public Account getAccountByID(String userID) {
Account editAccount;
for (int i = 0; i < accounts.size(); i++) {
editAccount = accounts.get(i);
if (editAccount.getId().equals(userID)) {
return editAccount;
}
}
return null;
}
public Account getAccountByName(String userName) {
Account editAccount;
for (int i = 0; i < accounts.size(); i++) {
editAccount = accounts.get(i);
if (editAccount.getName().equals(userName)) {
return editAccount;
}
}
return null;
}
public Account getAccountByuniqueID(String uniqueID) {
Account editAccount;
for (int i = 0; i < accounts.size(); i++) {
editAccount = accounts.get(i);
if (editAccount.getUniqueID().equals(uniqueID)) {
return editAccount;
}
}
return null;
}
public Session loginAccount(String userID, String userPass) {
if (getAccountByID(userID).getPass().equals(userPass)) {
Accounts.getInstance().getAccountByID(userID).setLogin(true);
Accounts.getInstance().getAccountByID(userID).formToken();
session = new Session(Accounts.getInstance().getAccountByID(userID), URI.create(
"/CactusServer/rest/accounts/" + Accounts.getInstance().getAccountByID(userID).getUniqueID()));
return session;
} else {
return null;
}
}
public Account logoutAccount(String token) {
Accounts.getInstance().getAccountToken(token).setLogin(false);
return Accounts.getInstance().getAccountToken(token);
}
public Account deleteAccount(String uniqueID) {
Account edit = Accounts.getInstance().getAccountToken(uniqueID);
userIDSet.remove(edit.getId());
uniqueIDSet.remove(edit.getUniqueID());
accounts.remove(edit);
return edit;
}
public ArrayList<Account> getAccounts(){
return accounts;
}
}