# Role

You are a Senior Flutter Developer working on "Colosseum's Choice".
You need to refactor the **Equipment System** to enforce **Slot-based restrictions**.

# Current Problem

Currently, `equipment` is a `List<Item>`, allowing the player to equip multiple weapons or armors simultaneously.

# Solution

Refactor the code to use an `Enum` based Map system: `Map<EquipmentSlot, Item>`.

- **Slots:** `weapon`, `armor`, `accessory`.
- **Rule:** Only one item per slot. Equipping a new item into an occupied slot should **SWAP** them (Old item goes to Inventory, New item goes to Equipment).

# Required Changes

Please generate the updated code for the following files.

---

## 1. `lib/models/item.dart` (Update)

- **Enum:** Create `enum EquipmentSlot { weapon, armor, accessory }`.
- **Class:** Add `final EquipmentSlot slot;` to the `Item` class.
- **Constructor:** Update to require `slot`.
- **Helper:** Add a getter `String get typeName` (returns "Weapon", "Armor", etc. based on enum).

## 2. `lib/models/character.dart` (Update)

- **Field Change:** Change `List<Item> equipment` to `Map<EquipmentSlot, Item> equipment = {};`.
- **Stat Logic:** Update `totalAtk` / `totalMaxHp` to iterate over `equipment.values`.
- **Method `equip(Item newItem)`:**
  1.  Check `newItem.slot`.
  2.  If `equipment[newItem.slot]` exists:
      - Move the _existing_ item to `inventory`.
  3.  Remove `newItem` from `inventory`.
  4.  Set `equipment[newItem.slot] = newItem`.
- **Method `unequip(Item item)`:**
  1.  Check if inventory has space.
  2.  Remove from `equipment`.
  3.  Add to `inventory`.

## 3. `lib/providers/battle_provider.dart` (Update)

- **Item Generation (`_onVictory`):**
  - When generating random items, assign appropriate slots.
  - Example: "Sword" -> `EquipmentSlot.weapon`, "Plate" -> `EquipmentSlot.armor`.
- **Equip Logic:** `equipItem` now just calls `player.equip(item)` (Swap logic is inside Character).

## 4. `lib/screens/inventory_screen.dart` (Update)

- **Equipped Area (UI Change):**
  - Instead of a ListView, create a **Row with 3 fixed Cards** (Weapon / Armor / Accessory).
  - **Loop:** Iterate through `EquipmentSlot.values`.
  - **Content:**
    - If `player.equipment[slot]` exists: Show Item Icon & Name. Tap to Unequip.
    - If null: Show "Empty [Slot Name]" placeholder.

---

# Output Format

Please provide the complete code for the 4 modified files.
