# 🎵 Conflict-Free Audio Recorder Plugin - Installation Guide

This guide will help you install the audio recorder plugin without any dependency conflicts, especially for projects with multiple existing plugins.

## 🎯 Quick Start (Recommended)

### Step 1: Automated Installation

```bash
# Navigate to your Cordova project directory
cd /path/to/your/cordova/project

# Copy the installation script
cp /Users/mccapplelaptop/Documents/PLUGINS/cordova-plugin-audio-recorder/install-conflict-free.sh .

# Make it executable
chmod +x install-conflict-free.sh

# Run the automated installation
./install-conflict-free.sh
```

### Step 2: Test the Installation

```bash
# Copy the test file to your project
cp /Users/mccapplelaptop/Documents/PLUGINS/cordova-plugin-audio-recorder/test-plugin.html www/

# Build and run
cordova build ios
cordova run ios
```

Then navigate to `test-plugin.html` in your app to verify everything works.

## 🔧 Manual Installation (If Automated Fails)

### Step 1: Clean Your Project

```bash
# Remove existing plugin if present
cordova plugin remove cordova-plugin-audio-recorder

# Clean the project
cordova clean ios

# Remove and re-add iOS platform
cordova platform remove ios
cordova platform add ios
```

### Step 2: Add the Plugin

```bash
# Add the conflict-free plugin
cordova plugin add /Users/mccapplelaptop/Documents/PLUGINS/cordova-plugin-audio-recorder

# Build the project
cordova build ios
```

### Step 3: Verify Installation

```bash
# Check if plugin is installed
cordova plugin ls | grep audio-recorder

# Should show: cordova-plugin-audio-recorder
```

## 🚨 Troubleshooting Common Issues

### Issue 1: "Duplicate Symbols" Error

**Solution**: This plugin is designed to avoid this error. If you still get it:

1. **Use the automated installation script** - it handles this automatically
2. **Check your existing plugins** - the script will detect conflicts
3. **Manual Xcode fix**: Open your project in Xcode and remove duplicate framework references

### Issue 2: "Module not found" Error

**Solution**: This is usually a JavaScript loading issue:

```bash
# Reinstall the plugin
cordova plugin remove cordova-plugin-audio-recorder
cordova plugin add /Users/mccapplelaptop/Documents/PLUGINS/cordova-plugin-audio-recorder

# Clean and rebuild
cordova clean ios
cordova build ios
```

### Issue 3: Build Errors

**Solution**: Try these steps in order:

1. **Use the automated script** - it handles most build issues
2. **Check Xcode**: Open `platforms/ios/*.xcworkspace` in Xcode
3. **Add AVFoundation manually**: In Xcode, go to your target → Build Phases → Link Binary With Libraries → Add `AVFoundation.framework`
4. **Clean build folder**: In Xcode, Product → Clean Build Folder

### Issue 4: Permission Issues

**Solution**: The plugin handles permissions automatically, but you can check:

```javascript
// In your app
navigator.audioRecorder.checkPermission(
    function(permission) {
        console.log('Permission:', permission);
    },
    function(error) {
        console.log('Error:', error);
    }
);
```

## 🧪 Testing Your Installation

### Test 1: Basic Plugin Check

Add this to your app's main JavaScript file:

```javascript
document.addEventListener('deviceready', function() {
    console.log('Testing Audio Recorder Plugin...');
    
    if (typeof navigator.audioRecorder !== 'undefined') {
        console.log('✅ Plugin loaded successfully');
        console.log('Quality constants:', navigator.audioRecorder.Quality);
        console.log('Format constants:', navigator.audioRecorder.Format);
    } else {
        console.log('❌ Plugin not loaded');
    }
}, false);
```

### Test 2: Use the Test File

```bash
# Copy test file
cp /Users/mccapplelaptop/Documents/PLUGINS/cordova-plugin-audio-recorder/test-plugin.html www/

# Open in your app
# Navigate to: test-plugin.html
```

### Test 3: Simple Recording Test

```javascript
// Test recording
navigator.audioRecorder.startRecording(
    function(result) {
        console.log('✅ Recording started:', result);
        
        // Stop after 3 seconds
        setTimeout(function() {
            navigator.audioRecorder.stopRecording(
                function(result) {
                    console.log('✅ Recording completed:', result);
                },
                function(error) {
                    console.log('❌ Stop error:', error);
                }
            );
        }, 3000);
    },
    function(error) {
        console.log('❌ Start error:', error);
    }
);
```

## 📱 Integration with Your App

### Basic Integration

```javascript
// In your app's main file
document.addEventListener('deviceready', function() {
    // Your app initialization
    initializeAudioRecorder();
}, false);

function initializeAudioRecorder() {
    if (typeof navigator.audioRecorder !== 'undefined') {
        // Request permission
        navigator.audioRecorder.requestPermission(
            function(permission) {
                if (permission === 'granted') {
                    console.log('Microphone permission granted');
                } else {
                    console.log('Microphone permission denied');
                }
            },
            function(error) {
                console.log('Permission error:', error);
            }
        );
    }
}
```

### API Integration

```javascript
function recordAndSendAudio() {
    navigator.audioRecorder.startRecording(
        function(result) {
            console.log('Recording started');
            
            // Stop after 5 seconds
            setTimeout(function() {
                navigator.audioRecorder.stopRecording(
                    function(result) {
                        console.log('Recording completed');
                        
                        // Send to your API
                        sendToAPI(result.audioData, result.audioBlob);
                    },
                    function(error) {
                        console.log('Stop error:', error);
                    }
                );
            }, 5000);
        },
        function(error) {
            console.log('Start error:', error);
        }
    );
}

function sendToAPI(audioData, audioBlob) {
    fetch('https://your-api.com/upload-audio', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            audioData: audioData,
            audioBlob: audioBlob,
            timestamp: new Date().toISOString()
        })
    })
    .then(response => response.json())
    .then(data => console.log('Upload success:', data))
    .catch(error => console.error('Upload error:', error));
}
```

## 🔍 Debug Information

### Check Plugin Status

```javascript
// Debug plugin status
if (typeof navigator.audioRecorder !== 'undefined') {
    console.log('Plugin Status:');
    console.log('- Available methods:', Object.getOwnPropertyNames(navigator.audioRecorder));
    console.log('- Quality settings:', navigator.audioRecorder.Quality);
    console.log('- Format settings:', navigator.audioRecorder.Format);
    
    // Test permission
    navigator.audioRecorder.checkPermission(
        function(permission) {
            console.log('- Permission status:', permission);
        },
        function(error) {
            console.log('- Permission error:', error);
        }
    );
} else {
    console.log('Plugin not available');
}
```

### Check Build Logs

```bash
# Check for errors in build
cordova build ios --verbose

# Check plugin list
cordova plugin ls

# Check platform info
cordova platform ls
```

## 📞 Getting Help

If you encounter issues:

1. **Check the troubleshooting guide**: [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
2. **Use the automated installation script**: `./install-conflict-free.sh`
3. **Test with the provided test file**: `test-plugin.html`
4. **Check the main README**: [README.md](README.md)

## ✅ Success Checklist

- [ ] Plugin installs without errors
- [ ] No "duplicate symbols" errors
- [ ] No "module not found" errors
- [ ] Plugin loads in JavaScript (`navigator.audioRecorder` exists)
- [ ] Permission request works
- [ ] Recording starts and stops successfully
- [ ] Audio data is returned correctly
- [ ] Blob conversion works
- [ ] API integration works

---

**Note**: This plugin is specifically designed to avoid conflicts with existing plugins like `cordova-plugin-camera`, `cordova-plugin-media`, and `cordova-background-geolocation`. The conflict-free design uses runtime framework detection instead of static imports.
