package CHAPTER04;

import java.util.Scanner;

public class REAL_HotelReservation { 
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int numHotels = 1;       // 호텔 수
        int numFloors = 5;       // 각 호텔의 층 수
        int numRooms = 4;        // 각 층의 방 수

        // [호텔][층][방] 구조의 3차원 배열로 예약 상태 저장 (0: 예약 가능, 1: 예약됨)
        int[][][] hotelStatus = new int[numHotels][numFloors][numRooms];

        int floor, room;
        char option;

        // 초기 예약 상태 출력
        System.out.println("호텔 예약 상태 (0: 예약 가능, 1: 예약됨)");
        for (int h = 0; h < numHotels; h++) {
            for (int f = 0; f < numFloors; f++) {
                for (int r = 0; r < numRooms; r++) {
                    String status = (hotelStatus[h][f][r] == 1) ? "예약됨" : "예약 가능";
                    System.out.printf("층 %d, 방 %d 상태: %s\n", f + 1, r + 1, status);
                }
            }
        }

        // 예약 입력 및 처리 반복
        do {
            // 층 입력 (유효성 검사 포함)
            do {
                System.out.print("\n예약할 층을 선택하세요 (1~" + numFloors + "): ");
                floor = scanner.nextInt();
                if (floor < 1 || floor > numFloors) {
                    System.out.println("잘못된 층 번호입니다. 1부터 " + numFloors + "까지 입력하세요.");
                }
            } while (floor < 1 || floor > numFloors);

            // 방 입력 (유효성 검사 포함)
            do {
                System.out.print("예약할 방을 선택하세요 (1~" + numRooms + "): ");
                room = scanner.nextInt();
                if (room < 1 || room > numRooms) {
                    System.out.println("잘못된 방 번호입니다. 1부터 " + numRooms + "까지 입력하세요.");
                }
            } while (room < 1 || room > numRooms);

            // 예약 처리
            if (hotelStatus[0][floor - 1][room - 1] == 0) { // 예약 가능
                hotelStatus[0][floor - 1][room - 1] = 1;    // 예약 처리
                System.out.printf("층 %d, 방 %d 상태를 예약하셨습니다.\n", floor, room);
            } else {
                System.out.printf("층 %d, 방 %d은 이미 예약되었습니다.\n", floor, room);
            }

            // 추가 예약 여부 확인
            System.out.print("다른 방도 예약하시겠습니까? (y/n): ");
            option = scanner.next().charAt(0);

        } while (option == 'y' || option == 'Y'); // 'y' 또는 'Y' 입력 시 반복

        // 최종 예약 상태 출력
        System.out.println("\n최종 예약 상태:");
        for (int h = 0; h < numHotels; h++) {
            for (int f = 0; f < numFloors; f++) {
                for (int r = 0; r < numRooms; r++) {
                    String status = (hotelStatus[h][f][r] == 1) ? "예약됨" : "예약 가능";
                    System.out.printf("층 %d, 방 %d 상태: %s\n", f + 1, r + 1, status);
                }
            }
        }
        scanner.close(); 
    }
}

