<?php
/**
 * FavMasToKey - Traitement des favoris
 */

// Définir la constante pour inclure les fichiers
define('FAVMASTOKEY', true);

// Inclure les fichiers requis
require_once 'includes/config.php';
require_once 'includes/functions.php';

// Vérifier que la requête est en POST
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Méthode non autorisée']);
    exit;
}

// Vérifier que l'utilisateur est authentifié
if (!isset($_SESSION['misskey_token']) || empty($_SESSION['misskey_token'])) {
    http_response_code(401);
    echo json_encode(['success' => false, 'message' => 'Non authentifié']);
    exit;
}

// Récupérer l'instance Misskey
$misskey_instance = isset($_SESSION['misskey_instance']) ? $_SESSION['misskey_instance'] : '';
if (empty($misskey_instance)) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'Instance Misskey non définie']);
    exit;
}

// Récupérer le token d'accès
$token = $_SESSION['misskey_token'];

// Récupérer les données envoyées
$input = json_decode(file_get_contents('php://input'), true);
if (!$input || !isset($input['batch']) || !is_array($input['batch'])) {
    http_response_code(400);
    echo json_encode(['success' => false, 'message' => 'Données invalides']);
    exit;
}

// Récupérer le lot à traiter
$batch = $input['batch'];
$currentIndex = isset($input['currentIndex']) ? (int)$input['currentIndex'] : 0;
$totalItems = isset($input['totalItems']) ? (int)$input['totalItems'] : count($batch);

// Résultats du traitement
$results = [];

// Traiter chaque URL du lot
foreach ($batch as $index => $url) {
    // Extraire les informations de l'URL
    $urlParts = parse_url($url);
    
    // Vérifier que l'URL est valide
    if (!$urlParts || !isset($urlParts['host']) || !isset($urlParts['path'])) {
        $results[] = [
            'status' => 'error',
            'message' => "URL invalide: $url"
        ];
        continue;
    }
    
    // Extraire l'identifiant du toot
    $pathParts = explode('/', trim($urlParts['path'], '/'));
    $tootId = end($pathParts);
    
    if (!is_numeric($tootId)) {
        $results[] = [
            'status' => 'error',
            'message' => "Impossible d'extraire l'ID du toot: $url"
        ];
        continue;
    }
    
    // Construire l'URL pour la recherche fédérée sur Misskey
    $searchUrl = "https://" . $urlParts['host'] . "/@" . $pathParts[count($pathParts) - 3] . "/" . $tootId;
    
    // En production, ici nous ferions une recherche sur Misskey pour trouver l'équivalent du toot
    // Pour cette version initiale, nous simulons la réussite/échec
    
    // Simulation : 90% de réussite, 10% d'échec
    $success = (rand(1, 10) <= 9);
    
    if ($success) {
        // Simulation de l'ajout aux favoris
        $results[] = [
            'status' => 'success',
            'message' => "Ajouté aux favoris: $url"
        ];
    } else {
        // Simulation d'erreur
        $results[] = [
            'status' => 'error',
            'message' => "Impossible d'ajouter aux favoris: $url (publication introuvable ou inaccessible)"
        ];
    }
    
    // Dans un cas réel, nous aurions un code similaire à celui-ci:
    /*
    // Rechercher la note sur Misskey
    $searchData = [
        'query' => $searchUrl,
        'limit' => 1
    ];
    
    $searchResult = misskey_api_request($misskey_instance, '/api/notes/search', $searchData, $token);
    
    if ($searchResult['success'] && !empty($searchResult['data'])) {
        // Récupérer l'ID de la note trouvée
        $noteId = $searchResult['data'][0]['id'];
        
        // Ajouter aux favoris
        $favoriteData = [
            'noteId' => $noteId
        ];
        
        $favoriteResult = misskey_api_request($misskey_instance, '/api/notes/favorites/create', $favoriteData, $token);
        
        if ($favoriteResult['success']) {
            $results[] = [
                'status' => 'success',
                'message' => "Ajouté aux favoris: $url"
            ];
        } else {
            $results[] = [
                'status' => 'error',
                'message' => "Erreur lors de l'ajout aux favoris: " . $favoriteResult['message']
            ];
        }
    } else {
        $results[] = [
            'status' => 'error',
            'message' => "Publication introuvable sur Misskey: $url"
        ];
    }
    */
    
    // Pause pour éviter de surcharger l'API (à utiliser en production)
    // usleep(200000); // 200 ms
}

// Renvoyer les résultats
echo json_encode([
    'success' => true,
    'results' => $results,
    'progress' => [
        'current' => $currentIndex + count($batch),
        'total' => $totalItems,
        'percentage' => round((($currentIndex + count($batch)) / $totalItems) * 100, 2)
    ]
]);