# Role

You are a Senior Flutter Developer.
Your task is to build a functional prototype for a "Text/UI-based Turn-based Roguelike Game" called "Colosseum's Choice".

# Technology Stack

- **Framework:** Flutter (Pure Flutter, NO Game Engine like Flame)
- **State Management:** Provider
- **Architecture:** MVVM (Model - Provider - Screen)
- **Theme:** Dark Mode

# Core Game Mechanics

1.  **Risk vs Return:** The player chooses an action (Attack/Defend) and then selects a Risk Level (Safe/Normal/Risky). Higher risk means lower success chance but higher effect.
2.  **Armor System:** Armor reduces incoming damage. Player's Armor decays by 50% at the start of their turn.
3.  **Turn-Based:** Player acts -> Result processing -> Delay (1 sec) -> Enemy acts -> Result processing.

# Required Files & Implementation Details

Please generate the complete Dart code for the following 4 files.
**IMPORTANT:** The code must be complete, error-free, and ready to run after adding the `provider` package.

---

## 1. `lib/models/character.dart`

**Description:** Data model for Player and Enemy.

- **Fields:** `String name`, `int hp`, `int maxHp`, `int armor`, `int atk`.
- **Constructor:** Initialize properties. `hp` defaults to `maxHp` if not provided.
- **Methods:**
  - `bool get isDead => hp <= 0;`

## 2. `lib/providers/battle_provider.dart`

**Description:** Central logic controller using `ChangeNotifier`.

- **Properties:**
  - `Character player`, `Character enemy`
  - `List<String> battleLogs` (Stores combat history)
  - `bool isPlayerTurn` (To disable buttons during enemy turn)
- **Methods:**
  - `void initializeBattle()`: Reset stats, clear logs. Player(HP:100, ATK:10), Enemy(HP:100, ATK:8).
  - `void playerAction(ActionType type, RiskLevel risk)`:
    1.  **Risk Logic:**
        - **Safe:** 100% Success, 50% Efficiency.
        - **Normal:** 80% Success, 100% Efficiency.
        - **Risky:** 40% Success, 200% Efficiency.
    2.  **Calculate Result:** Roll dice. If success, apply Damage (Attack) or Gain Armor (Defend). If fail, log "Miss".
    3.  **Turn End:** Call `_enemyTurn()` after a short delay.
  - `Future<void> _enemyTurn()`:
    - Wait 1 second (simulating thinking).
    - Enemy attacks player. (Damage = Enemy ATK - Player Armor).
    - Start Player's new turn: **Reduce Player Armor by 50%**.
  - `void _addLog(String message)`: Add to list and notify listeners.

**Enums:**

- `enum ActionType { attack, defend }`
- `enum RiskLevel { safe, normal, risky }`

## 3. `lib/screens/battle_screen.dart`

**Description:** The main UI.

- **Layout (Column):**
  - **Top (Status Area):** Row displaying [Enemy Name/HP] and [Player HP/Armor]. Use `LinearProgressIndicator` for HP bars.
  - **Middle (Log Area):** `Expanded` -> `ListView.builder`.
    - **Crucial:** Use `ScrollController` to auto-scroll to the bottom whenever a new log is added.
    - Style: Black background, green/white text font `Monospace`.
  - **Bottom (Control Area):**
    - Two large buttons: [ATTACK], [DEFEND].
    - On press, show a `SimpleDialog` or `BottomSheet` to select Risk Level (Safe/Normal/Risky).
    - Disable buttons if `!isPlayerTurn` or `game over`.

## 4. `lib/main.dart`

**Description:** Entry point.

- `main()`: `runApp`.
- `MyApp`: Uses `MultiProvider` to provide `BattleProvider`.
- `MaterialApp`:
  - `theme`: `ThemeData.dark()`.
  - `home`: `BattleScreen`.

---

# Output Format

Please provide the code for each file in separate code blocks.
