# Park Detail Endpoints Documentation

## Overview

The ThrillWiki API provides multiple endpoints for accessing park information with different levels of detail and functionality.

## Available Endpoints

### 1. Basic Park Detail
**Endpoint:** `GET /api/v1/parks/{park-slug}/`
**Purpose:** Fast loading of core park information

**Response includes:**
- Basic park details (name, slug, status, description)
- Location information with coordinates
- Operator and property owner details
- Park statistics (ride count, coaster count, average rating)
- Park areas/themed sections
- Photo information (primary, banner, card images)
- **Does NOT include individual ride details**

### 2. Park Rides List (Paginated)
**Endpoint:** `GET /api/v1/parks/{park-slug}/rides/`
**Purpose:** Paginated list of all rides at a specific park

**Query Parameters:**
- `page` - Page number for pagination
- `page_size` - Number of results per page (max 100, default 20)
- `category` - Filter by ride category (RC, FR, WR, etc.)
- `status` - Filter by operational status
- `search` - Search rides by name or description
- `ordering` - Order results by field

**Response includes:**
- Paginated list of rides with full details
- Each ride includes: name, slug, category, status, manufacturer, ratings, capacity, dates
- Pagination metadata (count, next, previous)

### 3. Individual Park Ride Detail
**Endpoint:** `GET /api/v1/parks/{park-slug}/rides/{ride-slug}/`
**Purpose:** Comprehensive details for a specific ride within park context

**Response includes:**
- Complete ride information
- Park context information
- Manufacturer and designer details
- Technical specifications
- Photos and media

### 4. Comprehensive Park Detail (RESTORED)
**Endpoint:** `GET /api/v1/parks/{park-slug}/detail/`
**Purpose:** Complete park information with rides summary

**Response includes:**
- All basic park detail information
- **Plus:** `rides_summary` object containing:
  - `total_count` - Total number of rides at the park
  - `sample` - First 10 rides with full details
  - `full_list_url` - Link to paginated rides endpoint

## Usage Examples

### Basic Park Info (Fast Loading)
```bash
curl "http://localhost:8000/api/v1/parks/cedar-point/"
```

### All Rides at Park (Paginated)
```bash
# First page
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/"

# With filtering
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/?category=RC&status=OPERATING"

# With pagination
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/?page=2&page_size=10"
```

### Comprehensive Park Detail (With Rides Summary)
```bash
curl "http://localhost:8000/api/v1/parks/cedar-point/detail/"
```

### Specific Ride at Park
```bash
curl "http://localhost:8000/api/v1/parks/cedar-point/rides/millennium-force/"
```

## Frontend Implementation Strategy

### Recommended Approach
1. **Initial Page Load:** Use `/parks/{slug}/` for fast park header/info
2. **Progressive Enhancement:** Load rides via `/parks/{slug}/rides/` with pagination
3. **Alternative:** Use `/parks/{slug}/detail/` for single-request comprehensive data

### Performance Considerations
- Basic park detail: ~2KB response, very fast
- Rides list: ~20KB per page (20 rides), paginated
- Comprehensive detail: ~25KB response, includes rides sample

### Caching Strategy
- Basic park data: Long cache (park info changes rarely)
- Rides data: Medium cache (ride status may change)
- Comprehensive detail: Medium cache (combines both)

## Response Structure Examples

### Basic Park Detail Response
```json
{
  "id": 249,
  "name": "Cedar Point",
  "slug": "cedar-point",
  "status": "OPERATING",
  "description": "Roller coaster capital of the world",
  "location": {
    "city": "Sandusky",
    "state": "OH",
    "country": "USA",
    "latitude": 41.4814,
    "longitude": -82.6838
  },
  "operator": {
    "id": 339,
    "name": "Cedar Fair",
    "slug": "cedar-fair"
  },
  "ride_count": 4,
  "coaster_count": 0,
  "average_rating": "8.16"
}
```

### Comprehensive Detail Response (Additional Fields)
```json
{
  // ... all basic park fields ...
  "rides_summary": {
    "total_count": 4,
    "sample": [
      {
        "id": 591,
        "name": "Cyclone",
        "slug": "cyclone",
        "category": "FR",
        "status": "OPERATING",
        "average_rating": "8.91"
      }
      // ... up to 10 rides
    ],
    "full_list_url": "/api/v1/parks/cedar-point/rides/"
  }
}
```

### Paginated Rides Response
```json
{
  "count": 4,
  "next": null,
  "previous": null,
  "results": [
    {
      "id": 591,
      "name": "Cyclone",
      "slug": "cyclone",
      "category": "FR",
      "status": "OPERATING",
      "description": "Exciting FR ride with thrilling elements",
      "park": {
        "id": 249,
        "name": "Cedar Point",
        "slug": "cedar-point"
      },
      "average_rating": "8.91",
      "capacity_per_hour": 1359,
      "opening_date": "1999-10-10"
    }
    // ... more rides
  ]
}
```

## Historical Context

The `/detail/` endpoint was temporarily removed during API refactoring but has been restored based on user feedback. It provides a middle-ground solution between the basic park endpoint and separate rides pagination, offering comprehensive park data with a rides preview in a single request.
