## 18. 스테이지 클래스 도입 및 스테이지 타입(상점, 엘리트, 휴식) 구현

### 목표
단순 `int`로 관리되던 스테이지 시스템을 `Stage` 클래스와 `StageType`으로 리팩토링하여 다양한 게임 모드(상점, 보스/엘리트, 휴식)를 지원할 수 있는 기반을 마련한다.

### 구현 내용

1.  **Stage 모델 정의 (lib/game/model/stage.dart)**
    *   `StageType` Enum: `battle`, `elite` (또는 boss), `shop`, `rest`.
    *   `Stage` Class:
        *   `type`: 스테이지 종류.
        *   `enemy`: 전투/엘리트 스테이지용 적 캐릭터 객체.
        *   `shopItems`: 상점 스테이지용 판매 아이템 리스트.

2.  **BattleProvider 리팩토링 (lib/providers/battle_provider.dart)**
    *   `Stage currentStage` 객체를 관리하도록 변경.
    *   `_spawnEnemy()` 메서드를 `_generateNextStage()`로 대체 및 확장.
    *   **스테이지 생성 규칙 (예시):**
        *   10, 20 스테이지... : **Elite/Boss**
        *   5, 15 스테이지... : **Shop** (아이템 3개 랜덤 생성)
        *   8, 18 스테이지... : **Rest** (체력 회복 기회)
        *   그 외: **Battle** (일반 몬스터)
    *   상점 기능을 위한 `buyItem(Item item)`, `sellItem(Item item)` 메서드 준비 (UI 연결은 추후).

3.  **UI 대응 (BattleScreen)**
    *   `currentStage.type`에 따라 화면을 다르게 그릴 수 있도록 `build` 메서드 내 분기 처리.
    *   우선 Battle 타입 외의 경우(Shop, Rest)에는 간단한 "Coming Soon" 또는 기본 UI 틀을 표시하여 에러를 방지한다.

### 기대 효과
*   게임의 흐름이 다채로워짐.
*   상점 구현을 위한 데이터 구조가 마련됨 (판매 기능 구현 가능).
*   추후 이벤트나 스토리 컷신 등을 스테이지 단위로 끼워 넣기 쉬워짐.
