<?php
// Script de conversion CSV Google Agenda vers format GitLab pour importation de tickets
// Usage: php convert-google-calendar-to-gitlab.php planninggeo2025googleagenda.csv gitlab-issues.csv

// Vérifier les arguments
if ($argc < 3) {
    echo "Usage: php convert-google-calendar-to-gitlab.php [fichier_source] [fichier_destination]\n";
    exit(1);
}

$source_file = $argv[1];
$dest_file = $argv[2];

// Vérifier l'existence du fichier source
if (!file_exists($source_file)) {
    echo "Erreur: Le fichier source '{$source_file}' n'existe pas.\n";
    exit(1);
}

// Ouvrir le fichier source
$input = fopen($source_file, 'r');
if ($input === false) {
    echo "Erreur: Impossible d'ouvrir le fichier source '{$source_file}'.\n";
    exit(1);
}

// Créer le fichier de destination
$output = fopen($dest_file, 'w');
if ($output === false) {
    echo "Erreur: Impossible de créer le fichier destination '{$dest_file}'.\n";
    fclose($input);
    exit(1);
}

// Lire l'en-tête pour identifier les colonnes
$header = fgetcsv($input);

// Vérifier que l'en-tête contient les colonnes attendues
$required_columns = ['Subject', 'Start Date', 'End Date', 'Description', 'Location'];
$missing_columns = [];

foreach ($required_columns as $col) {
    if (array_search($col, $header) === false) {
        $missing_columns[] = $col;
    }
}

if (!empty($missing_columns)) {
    echo "Attention: Les colonnes suivantes sont manquantes dans le fichier source: " . 
         implode(', ', $missing_columns) . "\n";
    echo "Le script continuera avec les colonnes disponibles.\n";
}

// Trouver les indices des colonnes dans l'en-tête
$column_indices = [
    'subject' => array_search('Subject', $header),
    'start_date' => array_search('Start Date', $header),
    'start_time' => array_search('Start Time', $header),
    'end_date' => array_search('End Date', $header),
    'end_time' => array_search('End Time', $header),
    'all_day' => array_search('All Day Event', $header),
    'description' => array_search('Description', $header),
    'location' => array_search('Location', $header),
    'private' => array_search('Private', $header)
];

// Écrire l'en-tête GitLab
fputcsv($output, ['title', 'description', 'labels', 'due_date']);

// Compteur d'événements traités
$event_count = 0;

// Traiter chaque ligne du fichier source
while (($data = fgetcsv($input)) !== false) {
    // S'assurer que la ligne contient au moins un sujet
    if (!isset($data[$column_indices['subject']]) || empty(trim($data[$column_indices['subject']]))) {
        continue; // Ignorer les lignes sans sujet
    }

    // Extraire les données
    $title = $data[$column_indices['subject']];
    
    // Préparer la description
    $description_parts = [];
    
    // Ajouter les dates
    $start_date = $column_indices['start_date'] !== false ? $data[$column_indices['start_date']] : '';
    $start_time = $column_indices['start_time'] !== false ? $data[$column_indices['start_time']] : '';
    $end_date = $column_indices['end_date'] !== false ? $data[$column_indices['end_date']] : '';
    $end_time = $column_indices['end_time'] !== false ? $data[$column_indices['end_time']] : '';
    $all_day = $column_indices['all_day'] !== false ? ($data[$column_indices['all_day']] === 'TRUE') : false;
    
    // Formater la date et l'heure
    $date_info = "Date: " . $start_date;
    if (!$all_day && !empty($start_time)) {
        $date_info .= " " . $start_time;
    }
    
    if (!empty($end_date) && $end_date !== $start_date) {
        $date_info .= " - " . $end_date;
        if (!$all_day && !empty($end_time)) {
            $date_info .= " " . $end_time;
        }
    } elseif (!$all_day && !empty($end_time) && $end_time !== $start_time) {
        $date_info .= " - " . $end_time;
    }
    
    $description_parts[] = $date_info;
    
    // Ajouter le lieu
    if ($column_indices['location'] !== false && !empty($data[$column_indices['location']])) {
        $description_parts[] = "Lieu: " . $data[$column_indices['location']];
    }
    
    // Ajouter la description
    if ($column_indices['description'] !== false && !empty($data[$column_indices['description']])) {
        $description_parts[] = $data[$column_indices['description']];
    }
    
    // Joindre toutes les parties de la description
    $description = implode("\n\n", $description_parts);
    
    // Définir les étiquettes (labels)
    $labels = "agenda,planning";
    
    // Si c'est un événement privé, ajouter l'étiquette "privé"
    if ($column_indices['private'] !== false && $data[$column_indices['private']] === 'TRUE') {
        $labels .= ",privé";
    }
    
    // Déterminer la date d'échéance (due_date)
    $due_date = !empty($end_date) ? $end_date : $start_date;
    
    // Écrire la ligne dans le fichier de destination
    fputcsv($output, [$title, $description, $labels, $due_date]);
    
    $event_count++;
}

// Fermer les fichiers
fclose($input);
fclose($output);

echo "Conversion terminée avec succès!\n";
echo "Nombre d'événements convertis: {$event_count}\n";
echo "Le fichier '{$dest_file}' est prêt à être importé dans GitLab.\n";
?>