make this code "import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;

public class HighSum {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("HighSum GAME");
        System.out.println("================================================================================");

        // Login system
        String username = "";
        while (true) {
            System.out.print("Enter your username: ");
            username = input.nextLine();

            System.out.print("Enter your password: ");
            String password = input.nextLine();

            if (password.equals("password")) {
                System.out.println();
                System.out.println("HighSum GAME");
                System.out.println("================================================================================");

                System.out.println(username + ", You have 100 chips");
                break;
            } else {
                System.out.println("Incorrect username or password. Please try again.");
            }
        }

        // Set initial chips to 100
        int chips = 100;

        boolean keepPlaying = true;
        while (keepPlaying) {
            System.out.println("--------------------------------------------------------------------------------");
            System.out.println("Game starts - Dealer shuffles deck.");
            System.out.println("--------------------------------------------------------------------------------");

            chips = playRound(username, chips, input);

            System.out.println("--------------------------------------------------------------------------------");
            System.out.print("Next Game? (Y/N) > ");
            String nextGame = input.next();
            keepPlaying = nextGame.equalsIgnoreCase("Y");

            if (keepPlaying) {
                chips = 100;
            }
        }

        input.close();
    }

    static int playRound(String username, int chips, Scanner input) {
        int roundNumber = 1;
        int currentBet = 0;
        boolean quit = false;
        int dealerChips = 100;

        // Create and shuffle deck
        ArrayList<Card> deck = new ArrayList<Card>();
        String[] suits = {"Hearts", "Diamonds", "Clubs", "Spades"};
        String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};
        for (String suit : suits) {
            for (String rank : ranks) {
                deck.add(new Card(suit, rank));
            }
        }
        Collections.shuffle(deck);

        // Deal cards to players
        ArrayList<Card> playerHand = new ArrayList<Card>();
        ArrayList<Card> dealerHand = new ArrayList<Card>();

        // Initial deal: 2 cards for each player
        playerHand.add(deck.remove(0));
        dealerHand.add(deck.remove(0));
        playerHand.add(deck.remove(0));
        dealerHand.add(deck.remove(0));

        while (roundNumber <= 4 && !quit) {
            System.out.println("Dealer dealing cards - ROUND " + roundNumber);
            System.out.println("--------------------------------------------------------------------------------");

            if (roundNumber > 1) {
                // Add cards
                playerHand.add(deck.remove(0));
                dealerHand.add(deck.remove(0));
            }

            // Print players’ hands
            System.out.println("Dealer");
            System.out.print("<HIDDEN CARD> "); // Modified part
            for (int i = 1; i < dealerHand.size(); i++) {
                System.out.print("<" + dealerHand.get(i) + "> ");
            }
            System.out.println();
            System.out.println();

            System.out.println(username);
            for (Card card : playerHand) {
                System.out.print("<" + card + "> ");
            }
            System.out.println();
            System.out.println("Value: " + playerHand.stream().mapToInt(Card::getValue).sum());
            System.out.println();

			// Bet
            boolean playerHasHigherCard = playerHand.get(playerHand.size() - 1).getValue() > dealerHand.get(dealerHand.size() - 1).getValue();

            System.out.print("Do you want to [C]all or [Q]uit?: ");
            String callOrQuit = input.next();
            if (callOrQuit.equalsIgnoreCase("Q")) {
                quit = true;
            }

            if (!quit) {
                if (playerHasHigherCard) {
                    System.out.print("Player call, state bet: ");
                    while (true) {
                        currentBet = input.nextInt();
                        if (currentBet > chips) {
                            System.out.println("Chips insufficient");
                            System.out.print("Player call, state bet: ");
                        } else if (currentBet < 0 || currentBet > (chips + dealerChips)) {
                            System.out.println("Invalid bet amount");
                            System.out.print("Player call, state bet: ");
                        } else {
                            break;
                        }
                    }
                } else {
                    System.out.print("Dealer call, state bet: ");
                    while (true) {
                        currentBet = (int) (Math.random() * (dealerChips / 2) + 1);
                        if (currentBet > dealerChips) {
                            currentBet = dealerChips;
                        }
                        if (currentBet >= 0 && currentBet <= (chips + dealerChips)) {
                            break;
                        }
                    }
                    System.out.println(currentBet);
                }
            }

            if (quit) {
                chips -= currentBet;
                System.out.println(username + ", You are left with " + chips + " chips");
                System.out.println("Bet on table : " + (currentBet * 2));
                System.out.println("Dealer Wins");
                return chips;
            }

            chips -= currentBet;
            dealerChips -= currentBet;
            System.out.println(username + ", You are left with " + chips + " chips");
            System.out.println("Bet on table : " + (currentBet * 2 * roundNumber));
            System.out.println("--------------------------------------------------------------------------------");
            roundNumber++;
        }

        if (!quit) {
            System.out.println("Game End - Dealer reveal hidden cards");
            System.out.println("--------------------------------------------------------------------------------");

            // Reveal dealer’s hand
            System.out.println("Dealer");
            for (Card card : dealerHand) {
                System.out.print("<" + card + "> ");
            }
            System.out.println();
            System.out.println("Value : " + dealerHand.stream().mapToInt(Card::getValue).sum());
            System.out.println();

            // Compare player and dealer values
            int playerValue = playerHand.stream().mapToInt(Card::getValue).sum();
            int dealerValue = dealerHand.stream().mapToInt(Card::getValue).sum();

            if (playerValue > dealerValue) {
                System.out.println(username + " Wins");
                chips += (currentBet * 2 * (roundNumber - 1));
            } else {
                System.out.println("Dealer Wins");
            }

            System.out.println(username + ", You have " + chips + " chips");
            System.out.println("Dealer shuffles used cards and place behind the deck.");
            System.out.println("--------------------------------------------------------------------------------");
        }

        return chips;
    }
}

class Card {
    private String suit;
    private String rank;

    public Card(String suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }

    public String getSuit() {
        return suit;
    }

    public String getRank() {
        return rank;
    }

    public int getValue() {
        if (rank.equals("Ace")) {
            return 14;
        } else if (rank.equals("King")) {
            return 13;
        } else if (rank.equals("Queen")) {
            return 12;
        } else if (rank.equals("Jack")) {
            return 11;
        } else {
            return Integer.parseInt(rank);
        }
    }

    public String toString() {
        return rank + " of " + suit;
    }
}"
into the next code by filling in the code into the 7 different classes with appropriate logic and suitable for ide in java 
"import java.util.*;

public class Player extends User{

	private int chips;
	protected ArrayList<Card> cardsOnHand;
	
	public Player(String loginName, String password, int chips) {
		super(loginName, password);
		this.chips = chips;
		this.cardsOnHand = new ArrayList<Card>();
	}

	public void addCard(Card card) {
		this.cardsOnHand.add(card);
	}
	
	public void showCardsOnHand() {
		System.out.println(getLoginName());
		for(Card card:this.cardsOnHand) {
			System.out.print(card+" ");
		}
		System.out.println();
	}
	
	public int getChips() {
		return this.chips;
	}
	
	public void addChips(int amount) {
		this.chips+=amount; //no error check
	}
	
	public void deductChips(int amount) {
		this.chips-=amount; //no error check
	}
	
	public void showTotalCardsValue() {
		System.out.println("Value:"+getTotalCardsValue());
	}
	
	public int getTotalCardsValue() {
		int totalValue = 0;
		for(Card card:cardsOnHand) {
			totalValue+=card.getValue();
		}
		return totalValue;
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Player player = new Player("IcePeak","password",100);
		Deck deck = new Deck();
		deck.shuffle();
		Card card1 = deck.dealCard();
		Card card2 = deck.dealCard();
		player.addCard(card1);
		player.addCard(card2);
		player.showCardsOnHand();
		player.showTotalCardsValue();
		
		/*player.deductChips(10);
		System.out.println(player.getChips());
		player.addChips(20);
		System.out.println(player.getChips());
		*/
	}
}
public class Keyboard {

	public static String readString(String prompt) {
		System.out.print(prompt);
		return new java.util.Scanner(System.in).nextLine();
	}

	public static int readInt(String prompt) {
		int input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Integer.parseInt(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter an integer ***");
			}
		}
		return input;
	}

	public static double readDouble(String prompt) {
		double input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Double.parseDouble(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter a double ***");
			}
		}
		return input;
	}

	public static float readFloat(String prompt) {
		float input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Float.parseFloat(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				System.out.println("*** Please enter a float ***");
			}
		}
		return input;
	}

	public static long readLong(String prompt) {
		long input = 0;
		boolean valid = false;
		while (!valid) {
			try {
				input = Long.parseLong(readString(prompt));
				valid = true;
			} catch (NumberFormatException e) {
				e.printStackTrace();
				System.out.println("*** Please enter a long ***");
			}
		}
		return input;
	}

	public static char readChar(String prompt) {
		char input = 0;
		boolean valid = false;
		while (!valid) {
			String temp = readString(prompt);
			if (temp.length() != 1) {
				System.out.println("*** Please enter a character ***");
			} else {
				input = temp.charAt(0);
				valid = true;
			}
		}
		return input;
	}

	public static boolean readBoolean(String prompt) {
		boolean valid = false;
		while (!valid) {
			String input = readString(prompt);
			if (input.equalsIgnoreCase("yes") || input.equalsIgnoreCase("y") || input.equalsIgnoreCase("true")
					|| input.equalsIgnoreCase("t")) {
				return true;
			} else if (input.equalsIgnoreCase("no") || input.equalsIgnoreCase("n") || input.equalsIgnoreCase("false")
					|| input.equalsIgnoreCase("f")) {
				return false;
			} else {
				System.out.println("*** Please enter Yes/No or True/False ***");
			}
		}
		return false;
	}

	public static java.util.Date readDate(String prompt) {
		java.util.Date date = null;
		boolean valid = false;
		while (!valid) {
			try {
				String input = readString(prompt).trim();
				if (input.matches("\\d\\d/\\d\\d/\\d\\d\\d\\d")) {
					int day = Integer.parseInt(input.substring(0, 2));
					int month = Integer.parseInt(input.substring(3, 5));
					int year = Integer.parseInt(input.substring(6, 10));
					java.util.Calendar cal = java.util.Calendar.getInstance();
					cal.setLenient(false);
					cal.set(year, month - 1, day, 0, 0, 0);
					date = cal.getTime();
					valid = true;
				} else {
					System.out.println("*** Please enter a date (DD/MM/YYYY) ***");
				}
			} catch (IllegalArgumentException e) {
				System.out.println("*** Please enter a date (DD/MM/YYYY) ***");
			}
		}
		return date;
	}

	private static String quit = "0";

	public static int getUserOption(String title, String[] menu) {
		displayMenu(title, menu);
		int choice = Keyboard.readInt("Enter Choice --> ");
		while (choice > menu.length || choice < 0) {
			choice = Keyboard.readInt("Invalid Choice, Re-enter --> ");
		}
		return choice;
	}

	private static void displayMenu(String title, String[] menu) {
		line(80, "=");
		System.out.println(title.toUpperCase());
		line(80, "-");
		for (int i = 0; i < menu.length; i++) {
			System.out.println("[" + (i + 1) + "] " + menu[i]);
		}
		System.out.println("[" + quit + "] Quit");
		line(80, "-");
	}

	public static void line(int len, String c) {
		System.out.println(String.format("%" + len + "s", " ").replaceAll(" ", c));
	}
	
}
public class GameModule {

	private Dealer dealer;
	private Player player;
	
	public GameModule() {
		dealer = new Dealer();
		player = new Player("IcePeak","password",100);
	}
	
	public void run() {
		//game machine
		System.out.println("High sum game!");
		dealer.shuffleCards();
		dealer.dealCardTo(player);
		dealer.dealCardTo(dealer);
		
		dealer.showCardsOnHand(); //override to hide card on dealer
		player.showCardsOnHand();
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		GameModule app = new GameModule();
		app.run();
	}

}
public class Deck {

	private ArrayList<Card> cards;
	
	public Deck() {
		cards = new ArrayList<Card>();
		String [] suits = {"Heart", "Diamond", "Spade", "Club"};
		for(int i=0;i<suits.length;i++) {
			String suit = suits[i];
			Card card = new Card(suit,"Ace",1);
			cards.add(card);
			for(int n=2;n<=10;n++) {
				Card aCard = new Card(suit,n+"",n);
				cards.add(aCard);
			}
			Card jackCard = new Card(suit,"Jack",10);
			cards.add(jackCard);
			Card queenCard = new Card(suit,"Queen",10);
			cards.add(queenCard);
			Card kingCard = new Card(suit,"King",10);
			cards.add(kingCard);
		}
	}
	
	public void shuffle() {
		Random random = new Random();
		for(int i=0;i<1000;i++) {
			int indexA = random.nextInt(cards.size());
			int indexB = random.nextInt(cards.size());
			Card cardA = cards.get(indexA);
			Card cardB = cards.get(indexB);
			cards.set(indexA, cardB);
			cards.set(indexB, cardA);
		}
	}
	
	public void showCards() {
		for(Card card: cards) {
			System.out.println(card);
		}
	}
	
	public Card dealCard() {
		return cards.remove(0);
	}
	
	public void appendCard(Card card) {
		cards.add(card);
	}
	
	public void appendCard(ArrayList<Card> cards) {
		for(Card card: cards) {
			appendCard(card);
		}
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Deck deck = new Deck();
		//deck.shuffle();
		deck.showCards();
		Card card1 = deck.dealCard();
		Card card2 = deck.dealCard();
		Card card3 = deck.dealCard();
		ArrayList<Card> cards = new ArrayList<Card>();
		cards.add(card1);
		cards.add(card2);
		cards.add(card3);
		deck.appendCard(cards);
		System.out.println();
		deck.showCards();
	}
}
public class Dealer extends Player{

	private Deck deck;
	
	public Dealer() {
		super("Dealer","",0);
		deck = new Deck();
	}
	
	public void shuffleCards() {
		System.out.println("Dealer shuffle deck");
		deck.shuffle();
	}
	
	public void dealCardTo(Player player) {
		Card card = deck.dealCard();
		player.addCard(card);
	}
	
	//Think of actions that a dealer need to do
	//conduct the game
	//implement those actions
}
public class Card {

	private String suit;
	private String name;
	private int value;
	
	public Card(String suit, String name, int value) {
		this.suit = suit;
		this.name = name;
		this.value = value;
	}
	
	public int getValue() {
		return value;
	}

	public String toString() {
		return "<"+this.suit+" "+this.name+">";
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Card card = new Card("Heart","Ace",1);
		System.out.println(card);
	}
}
public class User {

	private String loginName;
	private String password; //plain password
	
	public User(String loginName, String password) {
		this.loginName = loginName;
		this.password = password;
	}

	public String getLoginName() {
		return loginName;
	}
	
	//should be done using HASH algorithm
	public boolean checkPassword(String password) {
		return this.password.equals(password);
	}
}
"