Untitled
unknown
java
3 years ago
16 kB
11
Indexable
package seedu.duke.account;
import java.io.IOException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import seedu.duke.*;
import seedu.duke.exception.FinanceException;
import seedu.duke.exception.FinanceException.ExceptionCollection;
public class Account {
protected Wallet wallet;
protected String loginTime;
public Account(Wallet wallet) {
this.wallet = wallet;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd>HH:mm:ss");
loginTime = dtf.format(LocalDateTime.now());
}
public boolean handleAccountRequest() throws FinanceException, IOException {
boolean isAccountExit = false;
AccountUi.showAccountEntryMessage(wallet.getUserName());
AccountHistoryFile.createNewLoginAccount(wallet.getUserName(), loginTime);
CurrencyStructure currency;
while (!isAccountExit) {
String in = InputManager.receiveInputLine().toLowerCase();
String[] splits = in.split(" ");
if (splits.length == 1) {
String commandType = splits[0];
try {
switch (commandType) {
case "balance":
double totalBalance = wallet.getTotalBalance();
currency = wallet.getDefaultCurrency();
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
AccountUi.showTotalBalance(totalBalance, currency);
break;
case "details":
String username = wallet.getUserName();
currency = wallet.getDefaultCurrency();
List<Deposit> deposits = wallet.getDeposits();
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
AccountUi.showWalletDetails(username, currency, deposits);
break;
case "help":
AccountUi.showHelpPrompt();
isAccountExit = helpCenter();
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
if(!isAccountExit){
System.out.println("Back in the main account, please enter any commands.");
}
break;
case "logout":
isAccountExit = true;
AccountHistoryFile.deleteFile(wallet.getUserName(), loginTime);
AccountUi.showAccountExitMessage(wallet.getUserName());
break;
case "list":
AccountUi.listCommands();
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
case "currencies":
Currency.exchangeCommands(wallet.getDefaultCurrency());
System.out.println("Hi");
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
System.out.println("Back in the main account, please enter any commands.");
break;
default:
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
} catch (FinanceException e) {
e.handleException();
}
}
else if (splits.length == 2) {
String commandType = splits[0];
String commandArg = splits[1];
try {
switch (commandType) {
case "deposit":
MoneyCommand.saveCommand(wallet,commandArg);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
case "withdraw":
MoneyCommand.withdrawCommand(wallet,commandArg);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
default:
if(in.equals("account history")){
AccountHistoryFile.printFile(wallet.getUserName(), loginTime);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
}
else if(in.equals("log out")){
isAccountExit = true;
AccountHistoryFile.deleteFile(wallet.getUserName(), loginTime);
AccountUi.showAccountExitMessage(wallet.getUserName());
}
else{
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
}
} catch (FinanceException e) {
e.handleException();
}
}
else if (splits.length == 3) {
String commandType = splits[0];
String commandArg = splits[1] + " " + splits[2];
String commandType2 = splits[0] + " " + splits[1];
String commandArg2 = splits[2];
try {
switch (commandType) {
case "deposit":
MoneyCommand.saveCommand(wallet,commandArg);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
case "withdraw":
MoneyCommand.withdrawCommand(wallet, commandArg);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
default:
if(commandType2.equals("convert all")){
MoneyCommand.convertAllCommand(wallet,commandArg2);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
}
else {
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
}
} catch (FinanceException e) {
e.handleException();
}
}
else if (splits.length == 4){
String commandType = splits[0];
String recipientUsername = splits[1];
try {
int amount = Integer.parseInt(splits[2]);
String transferCurrency = splits[3];
try {
switch (commandType) {
case "convert":
MoneyCommand.exchangeCommand(wallet, splits[1]+" "+splits[2]+" "+splits[3]);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
case "transfer":
MoneyCommand.transferMoney(wallet, recipientUsername, transferCurrency, amount);
AccountUi.showTransfer(recipientUsername, transferCurrency, amount);
AccountHistoryFile.updateLoginAccount(wallet.getUserName(), loginTime, in);
break;
default:
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
} catch (FinanceException e) {
e.handleException();
}
} catch (NumberFormatException e) {
System.out.println("Please make sure to use integers for transfer amount");
}
}
else {
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
}
return isAccountExit;
}
public boolean helpCenter(){
boolean isExit = false;
while(!isExit){
String in = InputManager.receiveInputLine().toLowerCase();
try{
switch (in) {
case "change default currency": {
AccountUi.reenterPassword();
boolean isCorrectPass = false;
while (!isCorrectPass) {
if (wallet.getPassWord().equals(InputManager.receiveInputLine())) {
System.out.print("Enter the currency you would like to change your default to: ");
try {
String tempCurr = InputManager.receiveInputLine();
setDefaultCurrency(tempCurr);
System.out.println("Please enter exit to leave the help menu or enter another help command.");
} catch (FinanceException e) {
e.handleException();
}
isCorrectPass = true;
} else {
System.out.println("Incorrect password, please try again.\nPassword:");
}
}
break;
}
case "exit":
isExit = true;
break;
case "change password": {
AccountUi.reenterPassword();
boolean isCorrectPass = false;
while (!isCorrectPass) {
if (wallet.getPassWord().equals(InputManager.receiveInputLine())) {
String tempPass;
boolean isPassValid = false;
while(!isPassValid){
System.out.print("New password: ");
tempPass = InputManager.receiveInputLine();
if(tempPass.equals(wallet.getPassWord())){
System.out.println("Same password as the previous, please enter something else");
}
else if(tempPass.equals("exit")){
System.out.println("Exiting, your password has not been changed.");
}
else if(tempPass.length() < 8){
System.out.println("Password is not strong enough, please make it more than 8 characters");
}
else{
System.out.println("Your password has been successfully changed, type exit to leave the help menu");
wallet.setPassWord(tempPass);
WalletFile.updateWallet(wallet);
isPassValid = true;
}
}
isCorrectPass = true;
}
else {
System.out.print("Incorrect password, please try again.\nPassword:");
}
}
break;
}
case "change username": {
AccountUi.reenterPassword();
boolean isCorrectPass = false;
while (!isCorrectPass) {
if (wallet.getPassWord().equals(InputManager.receiveInputLine())) {
System.out.println("New username: ");
List<String> existingUsernames;
try {
existingUsernames = UserNameFileWorkings.userNameFile();
} catch (IOException e) {
throw new FinanceException(ExceptionCollection.USERFILE_CREATE_EXCEPTION);
}
boolean isUserExists = false;
while (!isUserExists) {
String tempUser = InputManager.receiveInputLine();
if (existingUsernames.contains(tempUser)) {
System.out.println("This username already exists, please enter another one");
}
else if(tempUser.equals("exit")){
System.out.println("Exiting, your username has not been changed.");
isUserExists = true;
}
else if(tempUser.length()<5){
System.out.println("Username is too short please enter another one");
}
else{
System.out.println("Your username has been successfully changed, please type exit to leave the help menu.");
wallet.setUserName(tempUser);
WalletFile.updateWallet(wallet);
isUserExists = true;
}
}
isCorrectPass = true;
}
else {
System.out.println("Incorrect password, please try again.\nPassword:");
}
}
break;
}
case "delete account":
return DeleteCommand.handleDelete(wallet);
default:
throw new FinanceException(ExceptionCollection.COMMAND_TYPE_EXCEPTION);
}
}
catch (FinanceException e){
e.handleException();
}
}
return false;
}
private void setDefaultCurrency(String commandArg) throws FinanceException {
CurrencyStructure oldCurrency = wallet.getDefaultCurrency();
CurrencyStructure currency = CurrencyList.findCurrencyByAbbrName(commandArg);
wallet.setDefaultCurrency(currency);
CurrencyStructure newCurrency = wallet.getDefaultCurrency();
double rate = newCurrency.getRate() / oldCurrency.getRate();
double totalBalance = wallet.getTotalBalance() * rate;
wallet.setTotalBalance(totalBalance);
WalletFile.updateWallet(wallet);
AccountUi.showSetDefaultCurrencyResult(oldCurrency.getAbbrName(), newCurrency.getAbbrName());
}
}
Editor is loading...