# AR Quick Start Guide

## Getting Started in 5 Minutes

### Step 1: Install Dependencies

```bash
cd android/wisata_app
flutter pub get
```

### Step 2: Run the Application

```bash
flutter run
```

### Step 3: Test AR Flow

1. **Login**: Use any credentials to access the app
2. **Go to Dashboard**: Select a destination
3. **View Details**: Tap on a destination card
4. **Enter AR**: Tap "View in Augmented Reality" button
5. **Scan Surface**: Move your phone to detect a flat surface
6. **Place Object**: Tap "Place Object" button
7. **Interact**: Use buttons to rotate, zoom, and manipulate

## AR Feature Quick Reference

### Access AR View

```dart
Navigator.pushNamed(context, '/ar', arguments: destination);
```

### Create AR Service

```dart
final arService = ArService(destination: destination);
```

### Place 3D Object

```dart
arService.placeObject(
  objectId: 'unique_id',
  modelPath: 'assets/models/model.glb',
  objectName: 'Object Name',
);
```

### Handle Gestures

- **Pan**: Rotate object
- **Pinch**: Scale object  
- **Tap**: Place or select object

### Available Controls

| Button | Action |
|--------|--------|
| Place Object | Add 3D model to scene |
| Rotate | Spin object around Y-axis |
| Zoom In | Increase object scale |
| Zoom Out | Decrease object scale |
| Reset | Return object to initial state |
| Delete | Remove all objects |

## File Structure

```
lib/
├── models/
│   ├── ar_object.dart        # 3D object model
│   ├── ar_plane.dart         # Surface plane model
│   ├── ar_scene.dart         # Scene state model
│   └── destination.dart      # Updated with AR fields
├── services/
│   ├── ar_service.dart       # AR logic service
│   └── ar_utils.dart         # Utility functions
└── screens/
    └── ar_view_screen.dart   # AR UI implementation

assets/
├── models/
│   ├── waterfall.glb        # Sample model
│   ├── mountain.glb         # Sample model
│   └── README.md            # Model instructions
```

## Configuration

### Android Requirements

**Minimum SDK**: API 21+
**Target SDK**: API 33+
**ARCore**: Required

### Camera Permissions

The app automatically requests camera permission on first AR access.

### 3D Models

Place 3D models in `assets/models/` directory with `.glb` extension.

Update `destination_service.dart` to reference model:
```dart
arModelPath: 'assets/models/your_model.glb',
```

## Debugging

### Enable Debug Logs

```dart
ArUtils.logArOperation('Operation', 'Message');
```

### Check Performance

```dart
print(ArDebugInfo.getDebugInfo(...));
```

### Common Issues

**No planes detected?**
- Move phone slowly in different directions
- Ensure good lighting
- Try on textured surfaces

**Object not appearing?**
- Check model file path
- Verify GLB file integrity
- Ensure file is in assets

**Performance lag?**
- Reduce model polygon count
- Use fewer objects
- Optimize textures

## Next Steps

1. Add custom 3D models to `assets/models/`
2. Implement real ARCore integration in `ar_flutter_plugin`
3. Add physics-based interactions
4. Enable multi-object scene management
5. Implement object persistence

## Documentation

- **Full Guide**: `AR_IMPLEMENTATION_GUIDE.md`
- **3D Models**: `assets/models/README.md`
- **API Reference**: Code comments in `ar_service.dart`

## Support

Check the main AR implementation guide for detailed troubleshooting and advanced topics.
