# WLED Screen Controller API Documentation

Complete REST API reference for the WLED Screen Controller server.

**Base URL:** `http://localhost:8080`
**API Version:** v1

---

## Table of Contents

- [Health & Info](#health--info)
- [Device Management](#device-management)
- [Processing Control](#processing-control)
- [Settings Management](#settings-management)
- [Calibration](#calibration)
- [Metrics](#metrics)

---

## Health & Info

### GET /health

Health check endpoint.

**Response:**
```json
{
  "status": "healthy",
  "timestamp": "2026-02-06T12:00:00Z",
  "version": "0.1.0"
}
```

### GET /api/v1/version

Get version information.

**Response:**
```json
{
  "version": "0.1.0",
  "python_version": "3.11.0",
  "api_version": "v1"
}
```

### GET /api/v1/config/displays

List available displays for screen capture.

**Response:**
```json
{
  "displays": [
    {
      "index": 0,
      "name": "Display 1",
      "width": 1920,
      "height": 1080,
      "is_primary": true
    }
  ],
  "count": 1
}
```

---

## Device Management

### POST /api/v1/devices

Create and attach a new WLED device.

**Request:**
```json
{
  "name": "Living Room TV",
  "url": "http://192.168.1.100",
  "led_count": 150
}
```

**Response:** `201 Created`
```json
{
  "id": "device_abc123",
  "name": "Living Room TV",
  "url": "http://192.168.1.100",
  "led_count": 150,
  "enabled": true,
  "status": "disconnected",
  "settings": {
    "display_index": 0,
    "fps": 30,
    "border_width": 10
  },
  "calibration": {
    "layout": "clockwise",
    "start_position": "bottom_left",
    "segments": [...]
  },
  "created_at": "2026-02-06T12:00:00Z",
  "updated_at": "2026-02-06T12:00:00Z"
}
```

### GET /api/v1/devices

List all attached devices.

**Response:**
```json
{
  "devices": [...],
  "count": 2
}
```

### GET /api/v1/devices/{device_id}

Get device details.

**Response:** Same as POST response

### PUT /api/v1/devices/{device_id}

Update device information.

**Request:**
```json
{
  "name": "Updated Name",
  "enabled": true
}
```

### DELETE /api/v1/devices/{device_id}

Delete/detach a device.

**Response:** `204 No Content`

---

## Processing Control

### POST /api/v1/devices/{device_id}/start

Start screen processing for a device.

**Response:**
```json
{
  "status": "started",
  "device_id": "device_abc123"
}
```

### POST /api/v1/devices/{device_id}/stop

Stop screen processing.

**Response:**
```json
{
  "status": "stopped",
  "device_id": "device_abc123"
}
```

### GET /api/v1/devices/{device_id}/state

Get current processing state.

**Response:**
```json
{
  "device_id": "device_abc123",
  "processing": true,
  "fps_actual": 29.8,
  "fps_target": 30,
  "display_index": 0,
  "last_update": "2026-02-06T12:00:00Z",
  "errors": []
}
```

---

## Settings Management

### GET /api/v1/devices/{device_id}/settings

Get processing settings.

**Response:**
```json
{
  "display_index": 0,
  "fps": 30,
  "brightness": 1.0,
  "smoothing": 0.3,
  "interpolation_mode": "average",
  "standby_interval": 1.0,
  "state_check_interval": 30
}
```

### PUT /api/v1/devices/{device_id}/settings

Update processing settings.

**Request:**
```json
{
  "display_index": 1,
  "fps": 60,
  "brightness": 0.8
}
```

---

## Calibration

### GET /api/v1/devices/{device_id}/calibration

Get calibration configuration.

**Response:**
```json
{
  "layout": "clockwise",
  "start_position": "bottom_left",
  "segments": [
    {
      "edge": "bottom",
      "led_start": 0,
      "led_count": 40,
      "reverse": false
    },
    {
      "edge": "right",
      "led_start": 40,
      "led_count": 30,
      "reverse": false
    },
    {
      "edge": "top",
      "led_start": 70,
      "led_count": 40,
      "reverse": true
    },
    {
      "edge": "left",
      "led_start": 110,
      "led_count": 40,
      "reverse": true
    }
  ]
}
```

### PUT /api/v1/devices/{device_id}/calibration

Update calibration.

**Request:** Same as GET response

### POST /api/v1/devices/{device_id}/calibration/test

Test calibration by lighting up specific edge.

**Query Parameters:**
- `edge`: Edge to test (top, right, bottom, left)
- `color`: RGB color array (e.g., [255, 0, 0])

---

## Metrics

### GET /api/v1/devices/{device_id}/metrics

Get detailed processing metrics.

**Response:**
```json
{
  "device_id": "device_abc123",
  "processing": true,
  "fps_actual": 29.8,
  "fps_target": 30,
  "uptime_seconds": 3600.5,
  "frames_processed": 107415,
  "errors_count": 2,
  "last_error": null,
  "last_update": "2026-02-06T12:00:00Z"
}
```

---

## Error Responses

All endpoints may return error responses in this format:

```json
{
  "error": "ErrorType",
  "message": "Human-readable error message",
  "detail": {...},
  "timestamp": "2026-02-06T12:00:00Z"
}
```

**Common HTTP Status Codes:**
- `200 OK` - Success
- `201 Created` - Resource created
- `204 No Content` - Success with no response body
- `400 Bad Request` - Invalid request
- `404 Not Found` - Resource not found
- `500 Internal Server Error` - Server error

---

## Interactive Documentation

The server provides interactive API documentation:

- **Swagger UI:** http://localhost:8080/docs
- **ReDoc:** http://localhost:8080/redoc
- **OpenAPI JSON:** http://localhost:8080/openapi.json
