# 43. 상점 시스템 구현 (Shop System Implementation)

## 목표 (Objective)
플레이어가 획득한 골드를 소비하여 장비를 구매하고 전력을 강화할 수 있는 상점 시스템을 구현합니다. 상점은 랜덤하게 생성된 아이템을 제공하며, 리롤(새로고침) 기능을 통해 전략적인 아이템 파밍을 지원합니다.

## 구현 내용 (Implementation Details)

### 1. 데이터 및 로직 (`BattleProvider`)
- **`_generateShopItems()`:** 현재 스테이지 티어에 맞는 랜덤 아이템 4개를 생성하는 로직 분리.
- **`rerollShopItems()`:** 50골드를 지불하고 상점 아이템 목록을 새로고침하는 기능.
  - **수정 사항:** `StageModel`의 `shopItems` 필드가 `final`이므로, 리스트 자체를 재할당하는 대신 기존 리스트의 내용을 `clear()` 후 새로운 아이템으로 `addAll()`하는 방식으로 변경하여 런타임 에러를 방지했습니다.
- **`buyItem(Item item)`:** 골드를 차감하고 아이템을 인벤토리에 추가하며, 상점 목록에서 해당 아이템을 제거하는 기능.

### 2. UI (`ShopUI` in `stage_ui.dart`)
- **헤더:** 'Merchant' 타이틀과 현재 보유 골드 표시 (황금색 강조).
- **아이템 목록 (GridView):**
  - 2열 카드 형태의 그리드 레이아웃.
  - 희귀도(Rarity)에 따른 이름 색상 및 테두리 적용.
  - 아이템 아이콘, 이름, 주요 스탯 요약 표시.
  - **가격 버튼:** 보유 골드에 따라 활성/비활성화. 클릭 시 구매 확인 팝업 출력.
- **하단 버튼:**
  - **Reroll (50 G):** 목록 새로고침 버튼 (골드 부족 시 비활성화).
  - **Leave Shop:** 상점을 떠나 다음 스테이지로 이동.

### 3. 테스트 및 복구 (Test & Restoration)
- **임시 테스트 설정 (완료):**
  - 초기 골드 200G로 시작.
  - 첫 스테이지를 강제로 상점(Shop)으로 설정.
- **정상 설정으로 복구 완료:**
  - 초기 골드 **50G**로 시작.
  - 상점은 **매 5번째 스테이지**마다 등장하도록 복구.