# HVAC Trainer CSV Import

This script imports trainer data from the Formidable Forms CSV export into the current HVAC Upskill platform user database.

## Usage

### Download the CSV File First
```bash
# Download the CSV file to your local machine
curl -O "https://upskill-staging.measurequick.com/wp-content/uploads/2025/06/250618120131_user-registration_formidable_entries.csv"
```

### Run Import Script
```bash
# Dry run (shows what would be imported without making changes)
php scripts/import-trainer-csv.php 250618120131_user-registration_formidable_entries.csv --dry-run

# Actual import
php scripts/import-trainer-csv.php 250618120131_user-registration_formidable_entries.csv
```

## What the Script Does

### User Creation
- Creates new WordPress users with `hvac_trainer` role
- Updates existing users and ensures they have `hvac_trainer` role
- Maps CSV fields to current database schema
- Sets users as `approved` (pre-approved from previous system)
- Generates secure random passwords
- Sends welcome emails with password reset links

### Field Mappings
| CSV Field | Database Field | Notes |
|-----------|----------------|-------|
| Name | first_name | Direct mapping |
| Last Name | last_name | Direct mapping |
| Work Email | user_email, user_login | Primary identifier |
| Country | user_country | Direct mapping |
| State | user_state | Direct mapping |
| Personal Accreditations | personal_accreditation | Direct mapping |
| Company Name | business_name | Direct mapping |
| Company Website | business_website | Direct mapping |
| Phone Number | business_phone | Direct mapping |
| Trainer Details | application_details | Background info |
| Training Target | training_audience | Converted to array |
| Organization Type | business_type | Mapped values |
| Profile Picture | profile_image_id | URL mapping only |

### Image Handling
- **Does NOT download images** from staging URLs
- Maps staging URLs (`upskill-staging.measurequick.com`) to production URLs
- Searches for existing attachments by URL
- Sets `profile_image_id` if attachment found
- Logs warnings for missing images

### Additional Features
- Creates Events Calendar organizer profiles
- Creates venue profiles for businesses
- Handles duplicate users (updates existing)
- Comprehensive error handling and logging
- Import statistics summary

## Important Notes

### Before Running
1. **Backup your database** - This script creates/modifies user data
2. **Run dry-run first** - Always test with `--dry-run` flag
3. **Check production domain** - Update the domain mapping in `map_profile_image()` method if needed

### Image URL Mapping
The script expects images to already exist on your current instance but with staging URLs in the CSV. It converts:
```
upskill-staging.measurequick.com → upskill.measurequick.com
```

Update line 169 in the script if your production domain is different.

### Generated Passwords
- Users get randomly generated secure passwords
- Welcome emails include password reset links
- Users must reset passwords on first login

### Organizer/Venue Creation
- Creates Events Calendar organizer profiles for each trainer
- Creates venue profiles for trainers with company names
- Links profiles to user accounts via meta fields

## Troubleshooting

### Common Issues
1. **Missing images**: Check if images exist on current instance
2. **Duplicate usernames**: Script auto-handles with numbered suffixes
3. **Email sending**: Ensure WordPress mail is configured
4. **WordPress not found**: Run from WordPress root directory

### Error Messages
- `Could not load WordPress`: Run from correct directory
- `CSV file not found`: Check file path
- `Could not find attachment`: Image doesn't exist on current instance

## Output Example
```
Starting import from: trainers.csv
----------------------------------------
Creating new user: trainer1@example.com
Creating new user: trainer2@example.com
Updating existing user: existing@example.com
Warning: Could not find attachment for URL: https://...

========================================
Import Complete!
========================================
Processed: 25
Created: 23
Updated: 2
Skipped: 0
Errors: 0
```