# 🔌 INTÉGRATION MICROVILLA - DÉCLENCHEMENT DES MISSIONS

## ✅ DÉCLENCHEMENT AUTOMATIQUE

Le plugin détecte **AUTOMATIQUEMENT** les réservations et blocages dans les cas suivants :

### 1. Réservations WooCommerce
```php
// Déclenché automatiquement par :
- woocommerce_order_status_completed
- woocommerce_order_status_processing

// Ce que le plugin vérifie :
- Les produits de la commande
- Si le produit est lié à une propriété
- Les dates check-in/check-out
```

### 2. Hooks Microvilla personnalisés
```php
// Si votre thème déclenche ces hooks :
do_action('microvilla_booking_created', $booking_id, $property_id);
do_action('microvilla_booking_confirmed', $booking_id, $property_id);

// Le plugin créera automatiquement la mission
```

### 3. Blocage de dates (admin)
```php
// Déclenché automatiquement quand :
- Vous enregistrez une propriété avec des dates bloquées
- Métadonnées surveillées :
  * _blocked_dates
  * _unavailable_dates
  * _owner_blocked_dates
  * blocked_dates
  * unavailable_dates
```

---

## 🛠️ DÉCLENCHEMENT MANUEL

### Méthode 1 : Hook WordPress
```php
// Dans votre code personnalisé :
do_action('cdv_create_cleaning_mission', $property_id, $checkin_date, $checkout_date);

// Exemple :
$property_id = 123;
$checkin = '2025-11-01';
$checkout = '2025-11-05';
do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);
```

### Méthode 2 : Appel direct de classe
```php
// Si vous avez accès à la classe :
if (class_exists('CDV_Microvilla_Integration')) {
    $integration = new CDV_Microvilla_Integration();
    $integration->create_mission_manual($property_id, $checkin, $checkout);
}
```

### Méthode 3 : Fonction helper
```php
/**
 * Helper pour créer une mission depuis n'importe où
 */
function cdv_create_mission($property_id, $checkin, $checkout) {
    do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);
}

// Utilisation :
cdv_create_mission(123, '2025-11-01', '2025-11-05');
```

---

## 📋 FORMAT DES DATES

Le plugin accepte plusieurs formats :

```php
// Format ISO (recommandé)
'2025-11-01'

// Timestamp
1730419200

// Format français
'01/11/2025'

// Format anglais
'11/01/2025'

// Le plugin normalise automatiquement au format Y-m-d
```

---

## 🔍 VÉRIFICATION

### Comment vérifier si une mission a été créée ?

```php
// Activer les logs WordPress
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);

// Consulter : wp-content/debug.log
// Vous verrez :
// "CDV Property Manager: Mission {id} créée avec succès pour propriété {property_id}"
```

### Vérifier dans la base de données
```sql
SELECT * FROM wp_cdv_missions 
WHERE property_id = 123 
ORDER BY created_at DESC;
```

### Vérifier dans le dashboard
```
WordPress Admin > Property Manager > Dashboard
```

---

## 🎯 CAS D'USAGE SPÉCIFIQUES

### Cas 1 : Réservation via formulaire personnalisé
```php
add_action('my_custom_booking_form_submitted', 'handle_custom_booking', 10, 1);

function handle_custom_booking($data) {
    $property_id = $data['property_id'];
    $checkin = $data['checkin'];
    $checkout = $data['checkout'];
    
    // Créer la mission
    do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);
}
```

### Cas 2 : Import de réservations
```php
function import_bookings_from_csv($csv_file) {
    $bookings = array_map('str_getcsv', file($csv_file));
    
    foreach ($bookings as $booking) {
        list($property_id, $checkin, $checkout) = $booking;
        
        // Créer une mission pour chaque réservation
        do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);
    }
}
```

### Cas 3 : Synchronisation avec API externe
```php
add_action('sync_airbnb_bookings', 'sync_from_airbnb');

function sync_from_airbnb() {
    $bookings = get_airbnb_bookings(); // Votre fonction API
    
    foreach ($bookings as $booking) {
        $property_id = get_property_from_airbnb_id($booking['listing_id']);
        
        do_action('cdv_create_cleaning_mission', 
            $property_id, 
            $booking['check_in'], 
            $booking['check_out']
        );
    }
}
```

---

## 🚨 CONDITIONS REQUISES

Pour qu'une mission soit créée, il faut :

✅ La propriété doit avoir une **équipe assignée**  
✅ La propriété doit avoir un **agent privilégié**  
✅ Les dates doivent être **valides**  
✅ Aucune mission ne doit **déjà exister** pour ces dates

Si une condition manque, le plugin log l'erreur dans `debug.log`

---

## 🔄 HOOKS DISPONIBLES

### Hooks que vous pouvez utiliser :

```php
// AVANT la création d'une mission
add_action('cdv_before_mission_created', function($property_id, $checkin, $checkout) {
    // Votre code
}, 10, 3);

// APRÈS la création d'une mission
add_action('cdv_mission_created', function($mission_id, $property_id, $agent_id) {
    // Votre code - envoyer SMS, notif Slack, etc.
}, 10, 3);
```

### Hooks internes du plugin :

```php
// Déclencher une création de mission
do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);

// Ces hooks sont déjà écoutés par le plugin
do_action('microvilla_booking_created', $booking_id, $property_id);
do_action('microvilla_booking_confirmed', $booking_id, $property_id);
```

---

## 📊 EXEMPLE COMPLET

```php
/**
 * Exemple : Système de réservation personnalisé
 */
class My_Booking_System {
    
    public function __construct() {
        add_action('init', array($this, 'register_booking_post_type'));
        add_action('save_post_booking', array($this, 'on_booking_saved'), 10, 2);
    }
    
    public function register_booking_post_type() {
        register_post_type('booking', array(
            'label' => 'Réservations',
            'public' => false,
            'show_ui' => true
        ));
    }
    
    public function on_booking_saved($post_id, $post) {
        // Récupérer les données
        $property_id = get_post_meta($post_id, '_property_id', true);
        $checkin = get_post_meta($post_id, '_checkin', true);
        $checkout = get_post_meta($post_id, '_checkout', true);
        $status = get_post_meta($post_id, '_status', true);
        
        // Créer la mission seulement si confirmée
        if ($status === 'confirmed' && $property_id && $checkin && $checkout) {
            do_action('cdv_create_cleaning_mission', $property_id, $checkin, $checkout);
        }
    }
}

new My_Booking_System();
```

---

## 🎓 BONNES PRATIQUES

### ✅ À FAIRE
- Toujours vérifier que la propriété a une équipe et un agent
- Logger les erreurs pour débugger
- Utiliser le hook `cdv_create_cleaning_mission` (plus flexible)
- Normaliser les dates avant l'envoi

### ❌ À ÉVITER
- Ne pas créer de mission si l'équipe/agent n'est pas configuré
- Ne pas créer de doublons (le plugin vérifie automatiquement)
- Ne pas hardcoder les dates (utiliser des variables)

---

## 🔧 DEBUG

### Activer les logs détaillés
```php
// Dans wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
```

### Messages de log à surveiller
```
✅ "Mission {id} créée avec succès"
❌ "Propriété {id} sans équipe ou agent configuré"
❌ "Mission déjà existante pour propriété {id}"
❌ "Dates invalides"
❌ "Agent {id} sans email configuré"
❌ "Échec envoi email"
```

---

## 📞 SUPPORT

Si les missions ne se créent pas automatiquement :

1. **Vérifier les logs** : `wp-content/debug.log`
2. **Tester manuellement** : `do_action('cdv_create_cleaning_mission', 123, '2025-11-01', '2025-11-05')`
3. **Vérifier la config** : Propriété avec équipe + agent
4. **Vérifier les hooks** : Votre thème déclenche-t-il les bons événements ?

---

**Le plugin écoute automatiquement les réservations et blocages. Si ça ne fonctionne pas, utilisez le hook manuel `cdv_create_cleaning_mission` !**
