public class Main {
    public static void main(String[] args) {
        // Create nodes with different IDs
        Node node1 = new Node(5);
        Node node2 = new Node(2);
        Node node3 = new Node(7);
        Node node4 = new Node(3);
        Node node5 = new Node(9);

        // Link nodes in a bidirectional ring
        // Each node has left and right neighbors
        node1.setRight(node2);
        node1.setLeft(node5);

        node2.setRight(node3);
        node2.setLeft(node1);

        node3.setRight(node4);
        node3.setLeft(node2);

        node4.setRight(node5);
        node4.setLeft(node3);

        node5.setRight(node1);
        node5.setLeft(node4);

        // Start the HS election process
        System.out.println("Starting HS Algorithm leader election...\n");
        node1.start();
        node2.start();
        node3.start();
        node4.start();
        node5.start();

        // Wait for all nodes to finish
        try {
            node1.join();
            node2.join();
            node3.join();
            node4.join();
            node5.join();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }

        // Print final states
        System.out.println("\nFinal states:");
        System.out.println(node1.toString());
        System.out.println(node2.toString());
        System.out.println(node3.toString());
        System.out.println(node4.toString());
        System.out.println(node5.toString());
    }
}
