# UNO Bot Integration - Quick Reference

## Game State JSON Quick View

### Checking Bot's Turn
```javascript
gameState.game.currentTurn === "Player 2"  // Bot's turn
gameState.player2.isCurrentTurn  // Alternative check
```

### Getting Playable Cards
```javascript
const playable = gameState.player2.playableCards
// Each card has: code, type, value, color, displayName, isPlayable
```

### Card Types
- `number`: 0-9 cards
- `skip`: Skip opponent (code: 404)
- `reverse`: Reverse direction (code: 0, acts as skip in 2-player)
- `draw2`: Opponent draws 2 (code: 252)
- `wild`: Change color (code: 300)
- `draw4_wild`: Change color + opponent draws 4 (code: 600)

### Current Card Info
```javascript
gameState.currentCard.displayName  // "5 red"
gameState.currentCard.color  // "R"
gameState.currentCard.value  // 5
```

### Bot Status
```javascript
gameState.botContext.canPlay    // Can play a card?
gameState.botContext.mustDraw   // Must draw a card?
gameState.botContext.hasUno     // Has 2 cards (press UNO)?
gameState.botContext.isWinning  // Has 1 card (about to win)?
```

## API Quick Reference

### Get Game State
```bash
GET http://localhost:5000/api/game/ABC123/state
```

### Play a Card
```bash
POST http://localhost:5000/api/game/ABC123/action
Content-Type: application/json

{
  "action": "play_card",
  "cardCode": "5R",
  "chosenColor": null
}
```

### Play Wild Card
```bash
POST http://localhost:5000/api/game/ABC123/action
Content-Type: application/json

{
  "action": "play_card",
  "cardCode": "W",
  "chosenColor": "R"
}
```

### Draw a Card
```bash
POST http://localhost:5000/api/game/ABC123/action
Content-Type: application/json

{
  "action": "draw_card"
}
```

## Color Codes
- `R` = Red
- `G` = Green
- `B` = Blue
- `Y` = Yellow

## Card Code Examples
- `5R` = 5 Red
- `0G` = 0 Green
- `skipB` = Skip Blue
- `_Y` = Reverse Yellow
- `D2R` = Draw 2 Red
- `W` = Wild
- `D4W` = Draw 4 Wild

## Simple Bot Logic

```python
# 1. Get game state
state = requests.get(f"{base_url}/api/game/{room}/state").json()['gameState']

# 2. Check if bot's turn
if state['game']['currentTurn'] != 'Player 2':
    return  # Not our turn

# 3. Get playable cards
playable = state['player2']['playableCards']

# 4. Choose card (simple strategy: play first playable)
if playable:
    card = playable[0]
    action = {
        'action': 'play_card',
        'cardCode': card['code'],
        'chosenColor': 'R' if 'wild' in card['type'] else None
    }
else:
    action = {'action': 'draw_card'}

# 5. Submit action
requests.post(f"{base_url}/api/game/{room}/action", json=action)
```

## LLM Prompt Template

```
You are playing UNO as Player 2.

CURRENT CARD: {currentCard.displayName}
YOUR HAND: {player2.cards with displayNames}
PLAYABLE CARDS: {player2.playableCards}
OPPONENT CARDS: {player1.cardCount}

RULES:
- Match color OR number
- Wild cards can be played anytime
- Special cards: Skip (opponent skips turn), Draw 2, Wild, Draw 4

Choose an action. Respond in JSON format:
{"action": "play_card", "cardCode": "CODE", "chosenColor": "R/G/B/Y or null"}
OR
{"action": "draw_card"}

Your decision:
```

## Console Logs to Watch

When running the game, look for these in browser console:
- `🎮 UNO GAME STATE (Simplified):` - Quick view
- `🤖 FULL GAME STATE (For Bot):` - Complete state object
- `📋 JSON for Bot API:` - Formatted JSON (copy-paste ready)

## Files Modified

### Client-side
- `/client/src/components/Game.js` - Added game state export & logging
- `/client/src/utils/cardParser.js` - NEW: Card parsing utilities
- `/client/src/utils/gameStateBuilder.js` - NEW: Game state JSON builder

### Server-side
- `/server.js` - Added HTTP API endpoints & Socket.IO event handlers

## Testing Workflow

1. Start server: `npm start` (in /uno-online)
2. Start client: `npm start` (in /uno-online/client)
3. Create game in browser, get room code
4. Join as Player 2
5. Open browser console (F12)
6. Watch for game state logs
7. Test API: `curl http://localhost:5000/api/game/ROOMCODE/state`

## Next: Miku Bot Integration

See `BOT_INTEGRATION_GUIDE.md` for full implementation details.
